创建线程的方式 创建线程的方式1、Thread类构造方法1234// Thread类源码private void init(ThreadGroup g, Runnable target, String name, long stackSize, AccessControlContext acc, boolean inheritThreadLocals)JAVA 1234567我们解释在初始化方法中的参数:ThreadGroup g 线程组,指定这个线程是在哪个线程组下Runnable target 指定要执行的任务String name 线程的名字,多个线程的名字是可以重复的。AccessControlContext acc 用于初始化变量inheritedAccessControlContextboolean inheritThreadLocals 可继承的ThreadLocalMARKDOWN 2、继承Thread123456789101112131415161718192021class ThreadDemo extends Thread{ @Override public void run() { System.out.println("Thread方法"); for (int i = 0;i<10;i++) { System.out.println("Thread方法" + i); } }}public class Thread1 { public static void main(String[] args) { //1、 创建线程 ThreadDemo threadDemo = new ThreadDemo(); //2、 线程开始执行,调用的不是run()方法,而是start()方法 //如果调用run方法相当于在主线程中执行 //注意不可多次调用start()方法。在第一次调用start()方法后,再次调用start()方法会抛出异常 threadDemo.start(); }}JAVA 20210225161631 3、 实现Runnable123456789101112131415161718class ThreadDemo2 implements Runnable{ @Override public void run() { System.out.println("Thread方法"); for (int i = 0;i<10;i++) { System.out.println("Thread方法" + i); } }}public class Thread2 { public static void main(String[] args) { ThreadDemo2 threadDemo2 = new ThreadDemo2(); Thread thread = new Thread(threadDemo2); thread.start(); }}JAVA 4、 实现callable123实现callable接口,重写call()方法,将所要完成的代码写进call()方法中,需要注意的是call()方法有返回值,并且可以抛出异常如果想要获取运行该线程后的返回值,需要创建Future接口的实现类的对象,即FutureTask类对象,调用该对象的get()方法可获取call()方法的返回值。MARKDOWN 1234567891011121314151617181920class ThreadDemo3 implements Callable<Integer> { @Override public Integer call() throws Exception { System.out.println("ThreadDemo3.call"); return 1; }}public class Thread3 { public static void main(String[] args) throws ExecutionException, InterruptedException { //创建FutureTask的对象 FutureTask<Integer> FutureTask = new FutureTask<>(new ThreadDemo3()); //创建Thread类的对象 Thread thread = new Thread(FutureTask); //线程执行 thread.start(); //获取返回值 System.out.println(FutureTask.get()); }}JAVA 20210225164503 5、 通过线程池1234567891011121314151617181920212223242526class ThreadDemo4 implements Runnable{ @Override public void run() { try { System.out.println(Thread.currentThread().getName()+"正在被执行"); Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } }}public class Thread4 { public static void main(String[] args) { //实现Runnable接口 ThreadDemo4 threadDemo4 = new ThreadDemo4(); //创建单线程线程池 ExecutorService executor = Executors.newSingleThreadExecutor(); for (int i = 0; i < 10; i++) { //线程执行 executor.execute(threadDemo4); } }}JAVA 6、 继承Thread类和实现Runnable接口的比较12# 两者之间没有本质的区别唯一的区别就是类和接口的区别MARKDOWN #Java #多线程 创建线程的方式 https://johnjoyjzw.github.io/2020/10/05/创建线程的方式/ Author John Joy Posted on October 5, 2020 Licensed under 生产者消费者问题 Previous 单例模式 Next