thread和runnable已经out了。取而代之的是callable<V>,它的结果存在future<V>中。后者有get对象可以阻塞并最终获得异步结果。FutureTask既是callable又是future。可以作为一个执行单元。

直接启动一个thread执行callable是不明智的,因为太多的短命的线程会影响jvm的性能。较好的办法是Executors的线程池。它有不同的方法创建不同的线程池:
newCachedThreadPool:New threads are created as needed; idle threads are kept
for 60 seconds.
newFixedThreadPool:The pool contains a fixed set of threads; idle threads are
kept indefinitely.
newSingleThreadExecutor:A “pool” with a single thread that executes the submitted
tasks sequentially (similar to the Swing event dispatch
thread).
newScheduledThreadPool:A fixed-thread pool for scheduled execution; a replacement
for java.util.Timer.
newSingleThreadScheduledExecutor:A single-thread “pool” for scheduled execution

当你有了一个callable,你可以交给ExecutorService去执行,通过submit。当然runnable和thread也可以,不过他们没有返回值。

如果你有一组task需要执行,你不必一个一个的去启动。ExecutorService的invokeAny和invokeAll可以帮你解决问题。你只需要处理返回的list<future>就可以了。ExecutorCompletionService是对ExecutorService的又一层封装,可以帮助你依次获得结果。

如果你的目的不只是利用多线程执行一组任务,而是需要多个线程互相协作,比如生产者-消费者这样的问题。那么需要进行线程间的通讯。传统的wait和notify已经out了,await和signal用起来也比较麻烦。如果你的需求满足一定的模式,那么java自带哪些同步设施,比如CyclicBarrier,CountDownLatch,Exchanger,Semaphore,SychronousQueue可以满足要求。具体的适用可以参见文档。

如果线程需要访问共享变量,那么java的同步集合是需要考虑得,其他的threadlocal也有应用场景。

转载于:https://www.cnblogs.com/alphablox/archive/2013/02/17/2914373.html

java多线程编程基础相关推荐

  1. 高并发下Java多线程编程基础

    摘要: Java线程同步与异步 线程池 无锁化的实现方案 分布锁的实现方案 分享的目的: 进一步掌握多线程编程和应用的技巧,希望对大家在平时的开发中应对高并发编程有所帮助 Java线程同步与异步 1. ...

  2. java多线程编程--基础篇

    一.基本概念 a.操作系统中进程与线程的概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式. 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间, 一个进程中可以启动 ...

  3. Java多线程编程实战指南+设计模式篇pdf

    下载地址:网盘下载 随着CPU 多核时代的到来,多线程编程在充分利用计算资源.提高软件服务质量方面扮演了越来越重要的角色.而 解决多线程编程中频繁出现的普遍问题可以借鉴设计模式所提供的现成解决方案.然 ...

  4. java多线程基础视频_【No996】2020年最新 Java多线程编程核心基础视频课程

    01.课程介绍.mp4 02.多线程编程基础-进程与线程.mp4 03.多线程编程基础-使用多线程-继承Thread类.mp4 04.多线程编程基础-使用多线程-实现Runnable接口.mp4 05 ...

  5. java多线程编程01---------基本概念

    一. java多线程编程基本概念--------基本概念 java多线程可以说是java基础中相对较难的部分,尤其是对于小白,次一系列文章的将会对多线程编程及其原理进行介绍,希望对正在多线程中碰壁的小 ...

  6. Java并发编程基础--ThreadLocal

    Java并发编程基础之ThreadLocal ​ ThreadLocal是一个线程变量,但本质上是一个以ThreadLocal对象为键.任意对象为值的存储结构,这个结构依附在线程上,线程可以根据一个T ...

  7. Java多线程编程那些事:volatile解惑--转

    http://www.infoq.com/cn/articles/java-multi-thread-volatile/ 1. 前言 volatile关键字可能是Java开发人员"熟悉而又陌 ...

  8. Java多线程编程模式实战指南(二):Immutable Object模式--转载

    本文由本人首次发布在infoq中文站上:http://www.infoq.com/cn/articles/java-multithreaded-programming-mode-immutable-o ...

  9. Java多线程编程-(5)-使用Lock对象实现同步以及线程间通信

    前几篇: Java多线程编程-(1)-线程安全和锁Synchronized概念 Java多线程编程-(2)-可重入锁以及Synchronized的其他基本特性 Java多线程编程-(3)-线程本地Th ...

最新文章

  1. 关于 Node.js 参数 max-old-space-size
  2. 软件开发模式:瀑布与敏捷
  3. LeetCode 1819. 序列中不同最大公约数的数目
  4. 【转载保存】java 23种设计模式 深入理解
  5. YOLACT论文笔记
  6. CP三次握手和四次分手--转
  7. php7.1 mysql_安装最新LAMP环境 (CentOS7+PHP7.1.5+Mysql5.7)
  8. 基于Jupyter完成Iris数据集的 Fisher线性分类,学习数据可视化技术
  9. YOLOV4论文记录
  10. Tapestry5 事件分派机制
  11. Eclipse安装中文语言包
  12. 清除微信或者企业微信的缓存或cookie
  13. 叶罗丽用计算机对话,叶罗丽小剧场:王默和水王子秀恩爱,俩人的对话也太搞笑了...
  14. JavaScript 鼠标事件
  15. NCCL配置多卡运行
  16. 论文笔记:Straight to the Tree: Constituency Parsing with Neural Syntactic Distance
  17. 红黑树从头至尾插入和删除结点的全程演示图
  18. Javascript 操作 SharePoint media web part
  19. HTML页面上传图片直接预览
  20. “Mayday!我们的站点又不能访问啦!”之DNS污染篇

热门文章

  1. 面条html5,使用 babel 全家桶模块化古老的面条代码
  2. 一调计算机专业综合理论试卷,一调计算机专业综合理论试卷(盐城)(新编)
  3. 微变等效电路法分析放大电路
  4. http header 设置编码_【译】http.client
  5. 《零基础》MySQL 创建数据库(五)
  6. python做词典_Python实现创建字典
  7. java 常见 错误_JAVA几个常见错误简析
  8. jacoco入门_Android jacoco 代码覆盖率测试入门
  9. GoLand中的指针操作 * 和
  10. 怎么用java跟数据库建立关系,java – 关系和构建数据库