您的位置:首页 > 其它

实现多线程的三种方式的区别?

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实现方式

  • 点赞
  • 收藏
  • 分享
  • 文章举报
xiaolu_333 发布了30 篇原创文章 · 获赞 0 · 访问量 489 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: