实现多线程的三种方式的区别?
2020-04-02 18:39
1001 查看
实现多线程的三种方式的区别?
- Thread实现多线程是单继承的。
- Runnable接口可以解决Thread的单继承问题
- Callable接口可以解决Runnable的无返回值问题
注意:get方法是阻塞的,即:线程无返回结果,get方法会一直等待
Callable接口实现方式
import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; class ThreadA implements Callable<String>{ vate boolean flag=false;//抢答处理 @Override public String call() throws Exception { synchronized (this){ if(this.flag==false){ this.flag=true; return Thread.currentThread().getName()+"抢答成功"; }else { return Thread.currentThread().getName()+"抢答失败"; } } } } public class ThreadDemo6 { public static void main(String[] args) throws ExecutionException, InterruptedException { ThreadA threadA=new ThreadA(); FutureTask<String> task=new FutureTask<>(threadA); FutureTask<String> task1=new FutureTask<>(threadA); FutureTask<String> task2=new FutureTask<>(threadA); new Thread(task,"竞赛者A").start(); new Thread(task1,"竞赛者B").start(); new Thread(task2,"竞赛者C").start(); System.out.println(task.get()); System.out.println(task1.get()); System.out.println(task2.get()); } }
Runnable实现方式
函数式编程实现
()->{}等价于new runnable(){}的方式。
public class ThreadDemo1 { public static boolean flag=true; public static void main(String[] args) { /** * 线程的停止方式 */ new Thread(()->{ long num=0; while (flag){ try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+"正在运行、num="+num++); } },"执行线程").start(); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } flag=false; } }
Thread实现方式
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- C++多线程——三种线程实现方式的区别与实际应用建议
- Java中有两种实现多线程的方式以及两种方式之间的区别
- 实现多线程方式三种方式
- JAVA多线程实现的三种方式
- 实现多线程的三种方式
- java多线程实现的三种方式
- JAVA多线程实现的三种方式
- JAVA多线程实现的三种方式
- Java多线程实现的三种方式
- 三种实现servlet的方式有什么区别?--转载
- JAVA多线程的三种实现方式
- java多线程---顺序打印ABC的三种实现---volatile方式
- java多线程的三种实现方式
- JAVA多线程实现的三种方式
- JAVA多线程实现的三种方式
- 多线程的三种实现方式及比较
- Java多线程实现的三种方式
- JAVA多线程实现的三种方式
- JAVA多线程实现的三种方式
- 三种java实现多线程的方式