Java异步多线程有哪些实现⽅式?⽂章⽬录
前⾔
异步多线程的四种⽅式:
1. 继承Thread
2. 实现Runnable接⼝
3. 实现Callable+FutureTask
4. 线程池
⼀、继承Thread
public class ThreadTest {
public static void main(String[] args){
System.out.println("main 开始");
Thread01 thread01 =new Thread01();
thread01.start();
System.out.println("main 结束");
}
public static class Thread01 extends Thread{
public void run(){
System.out.println("当前线程:"+Thread.currentThread().getId());
int i =10/2;
System.out.println("运⾏结果:"+i);
}
}
}
main 开始
main 结束
当前线程:12
运⾏结果:5
⼆、实现Runnable接⼝
public class ThreadTest {
public static void main(String[] args){
System.out.println("main 开始");
Runnable01 runnable01 =new Runnable01();
Thread thread =new Thread(runnable01);
thread.start();
System.out.println("main 结束");
}
public static class Runnable01 implements Runnable{
@Override
public void run(){
System.out.println("当前线程:"+Thread.currentThread().getId());
int i =10/2;
System.out.println("运⾏结果:"+i);
}
}
}
main 开始
main 结束
当前线程:12
运⾏结果:5
三、Callable+FutureTask
<() 可以阻塞线程,等待线程返回值返回
public class ThreadTest {
public static void main(String[] args) throws ExecutionException, InterruptedException {
System.out.println("main 开始");
FutureTask<Integer> futureTask =new FutureTask(new Callable01());
futureTask.run();//new Thread(futureTask).start();
//阻塞线程等待线程返回值返回
Integer o = ();
System.out.println("线程返回值"+o);
System.out.println("main 结束");
}
public static class Callable01 implements Callable<Integer>{
@Override
public Integer call(){
System.out.println("当前线程:"+Thread.currentThread().getId());
int i =10/2;
System.out.println("运⾏结果:"+i);
return i;
}
}
}
main 开始
当前线程:1
运⾏结果:5
线程返回值5
main 结束
四、线程池
线程池可以控制服务器资源,保持服务器线程数量不⾄于服务器压⼒过⼤,性能稳定
public class ThreadTest {
public static void main(String[] args){
System.out.println("main 开始");
//线程池可以控制服务器资源,保持服务器线程数量不⾄于服务器压⼒过⼤
ExecutorService executorService = wFixedThreadPool(20);
Future<Integer> submit = executorService.submit(new Callable01());
try{
//不get不会阻塞主线程
Integer integer = ();
System.out.println("线程结果"+integer);
}catch(InterruptedException e){
e.printStackTrace();
}catch(ExecutionException e){
e.printStackTrace();
}
System.out.println("main 结束");
}
public static class Callable01 implements Callable<Integer>{
@Override
public Integer call(){
System.out.println("当前线程:"+Thread.currentThread().getId());
int i =10/2;
System.out.println("运⾏结果:"+i);
return i;
}
java核心技术有哪些}
}
main 开始
当前线程:12
运⾏结果:5
线程结果5
main 结束
总结
Thread Runnable Callable+FutureTask线程池返回值N N Y Y 资源控制N N N Y
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论