java获取多线程的4种方法
来源:互联网 发布:人邮学院网络课程 编辑:程序博客网 时间:2024/05/20 02:30
java启动多线程的4种方法
继承Thread类
public class ThreadTest1 extends Thread { @Override public void run() { for (int i = 0; i < 5; i++) { System.out.println("Thread is printing"); try { sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args) { ThreadTest1 myThread = new ThreadTest1(); myThread.start(); for (int i = 0; i < 3; i++) { System.out.println("Main is printing"); try { sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } }}
运行结果:
Main is printingThread is printingMain is printingThread is printingThread is printingMain is printingThread is printingThread is printing
实现Runnable接口
public class ThreadTest2 implements Runnable { @Override public void run() { for (int i = 0; i < 5; i++) { System.out.println("Thread is printing"); try { Thread.currentThread().sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args) { ThreadTest2 myThread = new ThreadTest2(); Thread thread = new Thread(myThread); thread.start(); for (int i = 0; i < 3; i++) { System.out.println("Main is printing"); try { Thread.currentThread().sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } }}
运行结果
Main is printingThread is printingMain is printingThread is printingMain is printingThread is printingThread is printingThread is printing
实现Callable接口
这种方法可以返回线程执行的结果。
import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.FutureTask;public class ThreadTest3 implements Callable<String> { @Override public String call() throws Exception { for (int i = 0; i < 5; i++) { System.out.println("Thread is printing"); Thread.currentThread().sleep(1000); } return "Done"; } public static void main(String[] args) { ThreadTest3 myThread = new ThreadTest3(); FutureTask<String> futureTask = new FutureTask<String>(myThread); Thread thread = new Thread(futureTask); thread.start(); for (int i = 0; i < 3; i++) { System.out.println("Main is printing"); try { Thread.currentThread().sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } try { System.out.println("Thread return: " + futureTask.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } }}
运行结果
Main is printingThread is printingMain is printingThread is printingMain is printingThread is printingThread is printingThread is printingThread return: Done
通过线程池获取线程
Java通过Executors提供四种线程池
- CachedThreadPool 创建可缓存的线程池
- FixedThreadPool 创建定长的线程池,超出线程池长度的线程在队列中等待
- ScheduledThreadPool 创建一个定长的线程池,支持定时和周期性任务
- SingleThreadExecutor 创建一个单线程的线程池,所有任务通过指定顺序(FIFO,LIFO,优先级)执行
这里就不详细介绍四种线程池的区别了。
import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class ThreadTest4 { public static void main(String[] args) { ExecutorService cachedThreadPool = Executors.newCachedThreadPool(); for (int i = 0; i < 5; i++) { final int j = i; cachedThreadPool.execute(new Runnable() { @Override public void run() { for (int k = 0; k < 2; k++) { System.out.printf("Thread %d is printing\n", j); try { Thread.currentThread().sleep(1000 ); } catch (InterruptedException e) { e.printStackTrace(); } } } }); } }}
运行结果:
Thread 0 is printingThread 4 is printingThread 3 is printingThread 2 is printingThread 1 is printingThread 1 is printingThread 2 is printingThread 3 is printingThread 4 is printingThread 0 is printing
0 0
- java获取多线程的4种方法
- java多线程—Java 多线程同步的五种方法
- Java多线程的方法
- Java实现多线程的3种方法
- java多线程的几种实现方法
- java实现多线程的两种方法
- java实现多线程的两种方法
- java 多线程的三种方法
- java创建多线程的两种方法
- Java 多线程同步的五种方法
- Java 多线程同步的五种方法
- Java 多线程同步的五种方法
- Java 多线程同步的五种方法
- java实现多线程的3种方法
- Java创建多线程的几种方法
- JAVA多线程的两种实现方法
- JAVA多线程的几种方法
- Java 多线程同步的五种方法
- String和StringBuffer的区别
- java术语
- Mac安装tensorflow1.0
- hibernate 初级1
- Linux 内存寻址之分段机制
- java获取多线程的4种方法
- 我的思想毕业了吗
- volatile和synchronized区别
- 张飞硬件设计与开发视频教程1-9部
- DP——AtCoder Beginner Contest 050 #D
- IE找不到如何打开,以及IE连接不上网解决办法
- JAVA Swing JFrame窗口的建立
- 如何给自定义listview设置监听事件
- 硬链接和软链接的区别(转)