码迷,mamicode.com
首页 > 编程语言 > 详细

多线程-实现多线程三种方式

时间:2021-02-26 13:33:48      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:ring   sub   font   ati   rri   实现   this   call()   支持   

1:继承Thread
继承Thread 实现多线程,重写run方法,run方法实现具体的业务逻辑
Java 只支持单继承,不建议这样使用
/**
* 继承 Thread类,重写 run方法
*/
public class ThreadDome extends Thread {
@Override
public void run(){
System.out.println("多线程测试!");
}
public static void main(String[] args) {
ThreadDome threadDome=new ThreadDome();
//调用start方法
threadDome.start();
System.out.println("主线程执行!");
System.out.println("主线程执行2!");
}
}
2:实现接口 Runnable
实现接口 Runnable,实现run方法,这里注意下执行方式,执行是新增 Thread,传入Runnable 实例对象,再调用start方法
这里使用到静态代理原路,Thread代Runnable执行,实际是执行Runnable方法
public class ThreadRunnable implements Runnable {
public void run() {
System.out.println("实现 Runnable 多线程调用!");
}
public static void main(String[] args) {
Runnable runnable=new ThreadRunnable();
new Thread(runnable,"Runnable 线程").start();

System.out.println("主线程开始执行");
}
}
3:实现有返回值Callable<E> 接口
实现 call 方法,调用方式,
获取多线程执行服务类:ExecutorService executorService= Executors.newFixedThreadPool(1);
这里建议获取CPU线程数设置开启线程大小,通过 Runtime.getRuntime().availableProcessors()
单个提交调用submit方法,返回 Future,通过返回实例,调用get方法获取返回值
批量提交调用 invokeAll 传入多线程执行对象
调用shutdown 释放多线程服务
public class ThreadCallable implements Callable<Boolean> {
private String worker;
public ThreadCallable(String worker){
this.worker=worker;
}
public Boolean call() throws Exception {
System.out.println("线程:"+Thread.currentThread().getName()+ ",执行"+ worker);
Thread.sleep(1000);
return true;
}

public static void main(String[] args) throws ExecutionException, InterruptedException {
System.out.println("可用线程池:"+Runtime.getRuntime().availableProcessors());
ExecutorService executorService= Executors.newFixedThreadPool(1);
List<Callable<Boolean>> callableList=new ArrayList<Callable<Boolean>>();
for(int i=0;i<=100;i++){
callableList.add(new ThreadCallable("Worker"+i));
}
List<Future<Boolean>> futureList= executorService.invokeAll(callableList);
int i=0;
for (Future<Boolean> future:futureList) {
if(future.isDone()) {
System.out.println(i+"结果是" + future.get());
i++;
}
}
executorService.shutdown();
}
}


 

多线程-实现多线程三种方式

标签:ring   sub   font   ati   rri   实现   this   call()   支持   

原文地址:https://www.cnblogs.com/meilibao/p/14451407.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!