java多线程的实现可以通过以下四种方式

    1.继承Thread类,重写run方法

    2.实现Runnable接口,重写run方法

    3.通过Callable和FutureTask创建线程

    4.通过线程池创建线程

  方式1,2不再赘述.

  方式3,通过Callable和FutureTask创建线程实现多线程

    @Test
public void MyCallableTest() throws Exception {
//创建线程执行对象
MyCallable myCallable = new MyCallable();
FutureTask<String> futureTask = new FutureTask<>(myCallable);
//执行线程
Thread thread = new Thread(futureTask);
thread.start();
//获取线程方法返回数据
System.out.println(futureTask.get());
}
/**
* 创建实现类
*/
class MyCallable implements Callable<String>{
@Override
public String call() throws Exception {
System.out.println("test thread by callable");
return "result";
}
}

  方式4,通过线程池创建线程

public class ThreadPoolStu {

    @Test
public void TestThreadPool1() throws InterruptedException, ExecutionException {
ExecutorService executorService = Executors.newFixedThreadPool(2); //执行Runnable接口实现类 方式1
MyRunnable runnable1 = new MyRunnable();
executorService.execute(runnable1); //执行Runnable接口实现类 方式2
MyRunnable runnable2 = new MyRunnable();
Future<?> future2 = executorService.submit(runnable2);
System.out.println(future2.get());//若未执行完会阻塞该线程 //执行Callable接口实现类
MyCallable callable3 = new MyCallable();
Future<String> future3 = executorService.submit(callable3);
System.out.println(future3.get());//若未执行完会阻塞该线程 // 关闭线程池
executorService.shutdown();
} }
class MyCallable implements Callable<String>{
@Override
public String call() throws Exception {
System.out.println("test thread by callable");
return "result";
}
}
class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("thread execute");
}
}

最新文章

  1. Linux下/proc目录简介
  2. MD5加密(16/32)
  3. 深入理解ServletRequest与ServletResponse
  4. 使用MbrFix.exe修复MBR分区表
  5. BITED数学建模七日谈之三:怎样进行论文阅读
  6. iOS 网络 -- cocoaPods 安装和使用教程
  7. win7系统下连接使用mac 蓝牙键盘(Apple Wireless Keyborad)
  8. HDU 4814 Golden Radio Base 小模拟
  9. linq中group by
  10. python从2.7升级到3.5 需要主要的问题
  11. 在编写Arcgis Engine 过程中对于接口引用和实现过程过产生的感悟
  12. HBase的java客户端测试(一)---DDL操作
  13. js读取xml文件
  14. springboot程序无法访问静态资源
  15. Maximum Subarray LT53
  16. word2013怎样批量重设图片和大小?(转)
  17. ansible的安装过程 和基本使用
  18. vue中的数据双向绑定
  19. MongoDB3.2.8创建初始用户
  20. OpenStack创建实例错误解决方法

热门文章

  1. 【leetcode】53-MaximumSubarray
  2. mvc core2.1 Identity.EntityFramework Core 用户列表预览 删除 修改 (五)
  3. dp 优化 F2. Pictures with Kittens (hard version)
  4. 网站基于vs,复选框,单选款
  5. Map接口的使用
  6. oracle数据字典-权限-角色-参数
  7. zabbix--3.0--1
  8. 【转】C#获取当前日期时间(转)
  9. mina学习总结
  10. Delphi 初始化的顺序