JAVA多线程创建形式盘点
来源:互联网 发布:linux 指定jdk执行jar 编辑:程序博客网 时间:2024/06/05 09:01
第一种:直接继承Thread
public class Thread1 extends Thread {public void run() {int i = 4;while (i > 0) {i--;System.out.print(i);}}public static void main(String[] args) {for (int i = 0; i < 5; i++) {new Thread1().start();}}}
第二种:使用Thread的匿名内部类
public class Thread2 {static Thread[] arr = new Thread[5];public Thread2() {for (int i = 0; i < 5; i++) {arr[i] = new Thread() {public void run() {int i = 4;while (i > 0) {i--;System.out.print(i);}}};}}public static void main(String[] args) {new Thread2();for (Thread t : arr) {t.start();}}}
第三种:继承Runnable
public class Thread3 implements Runnable {@Overridepublic void run() {int i = 4;while (i > 0) {i--;System.out.print(i);}}public static void main(String[] args) {for (int i = 0; i < 5; i++) {new Thread(new Thread3()).start();}}}
第四种:使用Runnable的匿名内部类
public class Thread4 {static Thread[] arr = new Thread[5];public Thread4() {for (int i = 0; i < 5; i++) {arr[i] = new Thread(new Runnable() {@Overridepublic void run() {int i = 4;while (i > 0) {i--;System.out.print(i);}}});}}public static void main(String[] args) {new Thread4();for (Thread t : arr) {t.start();}}}
第五种:继承java.util.concurrent.Callable<T> 接口,然后实现该接口的call() 方法,这个call方法会返回泛型接口所指定的返回类型,启动线程是调用java.util.concurrent.ExecutorService的submit方法,即可得到该线程的返回值
import java.util.ArrayList;import java.util.List;import java.util.concurrent.Callable;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;public class Thread5 implements Callable<String> {@Overridepublic String call() throws Exception {return Thread.currentThread().getName();}public static void main(String[] args) {ExecutorService exec = Executors.newCachedThreadPool();List<Future<String>> list = new ArrayList<Future<String>>();for (int i = 0; i < 5; i++) {list.add(exec.submit(new Thread5()));}for (Future<String> str : list) {System.out.println(str.toString());}exec.shutdown();}}
上面就是JAVA创建多形式的几种形式。
在上面的例子中,启动线程都是通过实例化线程并调用线程的start() 方法来启动线程,在java.util.concurrent中为我们提供了一种新的方便实例化线程并自动运行线程的方法,示例如下:
import java.util.concurrent.Executor;import java.util.concurrent.Executors;public class MyRunnable implements Runnable {@Overridepublic void run() {int i = 4;while(i > 0){i--;System.out.print(i);}}public static void main(String[] args) {Executor exec = Executors.newCachedThreadPool();for(int i=0;i<5;i++){exec.execute(new MyRunnable());}}}
首先通过Executors.newCachedThreadPool()创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们,此时exec是java.util.concurrent.ThreadPoolExecutor对象,当调用其exec方法时将会帮你实例化并启动线程。
Executors类,提供了一系列工厂方法用于创建线程池,返回的线程池都实现了ExecutorService接口,比较重要的方法:
Ø newCachedThreadPool():创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。
Ø newFixedThreadPool(int nThreads):创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程。
Ø newScheduledThreadPool(intcorePoolSize):创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行。
- JAVA多线程创建形式盘点
- Java多线程探究-创建多线程
- java多线程创建方法
- Java 创建多线程
- Java - 多线程 - 创建线程
- java多线程创建
- java创建多线程
- Java 创建多线程
- Java中创建多线程
- Java多线程(1) 创建
- java多线程的创建
- Java创建多线程
- Java多线程创建方式
- java多线程的创建
- Java创建多线程
- Java多线程创建
- Java创建多线程
- Java创建多线程
- 【珍藏】 2012Android开发热门资料(110个)
- 【绝对给力】Android开发免豆资料(教程+工具+源码)下载地址汇总
- No.1眼睛式屏幕显示器
- 2013百度笔试所感
- strncat函数
- JAVA多线程创建形式盘点
- Cocos2d-x建工程时避免copy文件夹和库
- Codeforces Round 192 B. Road Construction
- Android源码50例汇总,欢迎各位下载
- Hadoop学习笔记【12】-Hadoop2.1全分布式集群安装
- 关于使用eclipse开发android程序不能运行的问题。
- qt-eclipse-c++环境配置(图形界面开发)
- Activity及Intent
- 应该知道的Linux技巧