广州的网站建设公司,手机网站设计神器,品牌建设经费投入占销售比重,网站建设公司需要什么资质Java创建多线程的最全方法 一、继承Thread#xff0c;重写run方法二、实现Runnable接口#xff0c;重写run方法三、使用匿名内部类创建 Thread 子类对象四、使用匿名内部类#xff0c;实现Runnable接口五、实现Callable接口六、使用线程池创建线程 一、继承Thread#xff0… Java创建多线程的最全方法 一、继承Thread重写run方法二、实现Runnable接口重写run方法三、使用匿名内部类创建 Thread 子类对象四、使用匿名内部类实现Runnable接口五、实现Callable接口六、使用线程池创建线程 一、继承Thread重写run方法
创建出MyThread实例并不代表在系统真的创建一个线程只有调用start方法时才创建出一个新的线程运行一次Java程序就启动了一个进程一个进程里至少会有一个线程这里JVM默认创建的线程就是main线程主线程main主线程和MyThread创建出来的新线程是同时执行各执行各的调用run方法会顺序执行
public class MyThread extends Thread{Overridepublic void run() {for(int i 0;i 100;i){System.out.println(Hello World!!i);}}public static void main(String[] args) {MyThread t1 new MyThread();t1.start();//启动线程for(int i 0;i 1000;i){System.out.println(主线程的 Hello World!!i);}}
}二、实现Runnable接口重写run方法
通过自定义一个类 MyThread1 实现 Runnable 接口重写 run 方法最后在main方法new出MyThread1 实例 和 Thread实例最后通过 start 方法创建并启动线程。主线程和新线程是同时执行互不影响
public class MyThread1 implements Runnable{Overridepublic void run() {for(int i 0;i 2000;i){System.out.println( 我在玩手机i);}}public static void main(String[] args) {MyThread1 myThread1 new MyThread1();new Thread(myThread1).start();for(int i 0;i 2000;i){System.out.println(我在吃饭i);}}
}三、使用匿名内部类创建 Thread 子类对象
直接创建Thread子类同时实例化出一个对象重写run方法最后通过start方法创建并启动线程
public class A {public static void main(String[] args) {Thread thread new Thread(){Overridepublic void run(){System.out.println(使用匿名内部类创建 Thread 子类对象);}};thread.start();}
}四、使用匿名内部类实现Runnable接口
通过使用使用匿名内部类实现Runnable接口作为Thread构造方法的参数最后通过start创建并启动线程
public class A {public static void main(String[] args) {Thread thread new Thread(new Runnable() {Overridepublic void run(){System.out.println(使用匿名内部类创建 Thread 子类对象);}});thread.start();}
}五、实现Callable接口
创建一个类 MyCallable 实现Callable接口重写call方法有返回值表示多线程运行的结果创建MyCallable对象表示多线程要执行的任务创建FutureTask的对象管理多线程运行的结果创建Thread类的对象并启动
public class MyCallable implements CallableInteger {Overridepublic Integer call() throws Exception {System.out.println(实现Callable接口);return 2;}public static void main(String[] args) throws ExecutionException, InterruptedException {MyCallable myCallable new MyCallable();FutureTaskInteger f new FutureTask(myCallable);Thread thread new Thread(f);thread.start();System.out.println(f.get());}
}六、使用线程池创建线程
在Java中线程池的本体叫ThreadPoolExecutor他的构造方法写起来十分麻烦为了简化构造方法标准库就提供了一系列方法简化使用
public class MyThread4 implements Runnable{Overridepublic void run() {for (int i 0; i 10; i) {System.out.println(我正在学习 i);}}public static void main(String[] args) {ExecutorService executorService Executors.newCachedThreadPool();//创建一个没有上线的线程池// ExecutorService executorService1 Executors.newFixedThreadPool(6);//创建固定数量的线程池executorService.submit(new MyThread4());//提交任务executorService.shutdown();//销毁线程池}
}