2019独角兽企业重金招聘Python工程师标准>>>

线程可以驱动任务,因此你需要一种描述任务的方式,这可以由Runnable接口来提供。要想定义任务,只需实现Runnable接口并编写run方法,使得该任务可以执行你的命令。


public class LiftOff implements Runnable {protected int countDown = 10;private static int taskCount = 0;//id可以用来区分任务的多个实例private final int id = taskCount++;public LiftOff(){System.out.println("调用了无参的构造函数");  }public LiftOff(int countDown){this.countDown = countDown;System.out.println("调用了有参的构造函数\n"+  "参数内容为:"+countDown);  }public String status(){return "#" + id + "(" + (countDown > 0 ? countDown : "Liftoff!") + "),";}@Overridepublic void run() {while(countDown-- > 0){System.out.println(status());//使当前线程从执行状态(运行状态)变为可执行态(就绪状态)。//cpu会从众多的可执行态里选择,也就是说,//当前也就是刚刚的那个线程还是有可能会被再次执行到的,//并不是说一定会执行其他线程而该线程在下一次中不会执行到了。Thread.yield();}}public static void main(String[] args) {LiftOff test1 = new LiftOff();test1.run();System.out.println("\n");LiftOff test2 = new LiftOff(5);test2.run();}}

将Runnable对象转变为工作任务的传统方式是把它提交给一个Thread构造器,
Thread构造器只需要一个Runnable对象。调用Thread对象的start()方法为该线程执行必需的初始化操作,
然后调用Runnable的run()方法,以便在这个新线程中启动该任务。因为main()方法和LiftOff.run()是由不同
的线程执行的,因此程序同时运行两个方法。

线程调度没有顺序的,由CPU决定。

接下来通过java.util.concurrent包中的执行器(Executor)将为你管理Thread对象,从而简化了并发编程。

1:CachedThreadPool首先会按照需要创建足够多的线程来执行任务(Task)。随着程序执行的过程,有的线程执行完了任务,可以被重新循环使用时,才不再创建新的线程来执行任务
对shutdown()方法的调用可以防止新任务被提交给这个Executor,当前线程(即驱动main()的线程)将
继续运行在shutdown()被调用之前提交的所有任务。这个程序将在Executor中的所有任务完成之后尽快退出。

2:FixedThreadPool模式会使用一个优先固定数目的线程来处理若干数目的任务。规定数目的线程处理所有任务,一旦有线程处理完了任务就会被用来处理新的任务(如果有的话)。
最好把3换成Runtime.getRuntime().availableProcessors(),这样能更大程度利用你的电脑CPU处理。

3:SingleThreadExecutor就像是线程数量为1的FixedThreadPool。如果多个任务被提交给SingleThreadExecutor的话,那么这些任务会被保存在一个队列中,并且会按照任务提交的顺序,一个先执行完成再执行另外一个线程。SingleThreadExecutor模式可以保证只有一个任务会被执行。这种特点可以被用来处理共享资源的问题而不需要考虑同步的问题。

转载于:https://my.oschina.net/zhangjie5201314/blog/797706

Java多线程由易到难相关推荐

  1. Java面试题 详解 由易到难

    目录 1.   Java 基础 2.   容器 3.   多线程 4.   反射 5.   对象拷贝 6.   Java Web 7.   异常 8.   网络 9.   设计模式 10. Sprin ...

  2. 40个Java多线程问题总结

    (转) 这篇文章作者写的真是不错 40个问题汇总 1.多线程有什么用? 一个可能在很多人看来很扯淡的一个问题:我会用多线程就好了,还管它有什么用?在我看来,这个回答更扯淡.所谓"知其然知其所 ...

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

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

  4. Java多线程发展简史

    摘自: http://www.raychase.net/698 这篇文章,大部分内容,是周五我做的一个关于如何进行Java多线程编程的Knowledge Sharing的一个整理,我希望能对Java从 ...

  5. 史上最全 Java 多线程面试题及答案

    这篇文章主要是对多线程的问题进行总结的,因此罗列了40个多线程的问题. 这些多线程的问题,有些来源于各大网站.有些来源于自己的思考.可能有些问题网上有.可能有些问题对应的答案也有.也可能有些各位网友也 ...

  6. ***JAVA多线程和并发基础面试问答

    多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一.在这里,从面试的角度列出了大部分重要的问题,但是你仍然应该牢固的掌握Java多线程基础知识来对应日后碰到的问题.(校对注:非常赞同这个观 ...

  7. 顶级Java多线程面试题及回答

    1)现在有T1.T2.T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行? 这个线程问题通常会在第一轮或电话面试阶段被问到,目的是检测你对"join"方法是否熟 ...

  8. Java多线程笔记(零):进程、线程与通用概念

    前言 不积跬步,无以至千里:不积小流,无以成江海.在学习Java多线程相关的知识前,我们首先需要去了解一点操作系统的进程.线程以及相关的基础概念. 进程 通常,我们把一个程序的执行称为一个进程.反过来 ...

  9. [转] Java多线程发展简史

    这篇文章,大部分内容,是周五我做的一个关于如何进行Java多线程编程的Knowledge Sharing的一个整理,我希望能对Java从第一个版本开始,在多线程编程方面的大事件和发展脉络有一个描述,并 ...

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

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

最新文章

  1. 递归/回溯:subsets求子集
  2. 重磅~ 深度学习中的图像分割:方法和应用
  3. android 中文 API (41) —— RatingBar.OnRatingBarChangeListener
  4. 业内首发,ACK@Edge支持高质量加密网络与精细化管理
  5. python设置word背景色_Python数据可视化:WordCloud入门
  6. java调用c视频接口_JAVA本地调用(JNI- java调用c)
  7. linux内核那些事之mempolicy(1)
  8. java 将一串字符串 转换成_简单几步,教你如何轻松的将Java中的字符串转换为Integer,你学会了吗?...
  9. Epic:把虚幻引擎推向所有游戏平台
  10. 非结构化数据上下文中的GraphQL
  11. PHP在微博优化中的“大显身手”
  12. git入门:安装配置 创建版本库
  13. python坐标系教程_python Shapely使用指南详解
  14. 下载并安装lsi MegaRAID raid卡 管理工具
  15. 基于 Java 机器学习自学笔记 (第66至68天:主动学习之ALEC)
  16. ardruino控制继电器_arduino控制继电器
  17. Linux驱动学习--HCI框架及源码分析
  18. 外包php技术,php外包
  19. 物联网安全攻防的“线上幽灵”
  20. 低噪声与功放选型购买

热门文章

  1. ASP.NET内容总结
  2. Allegro 铜皮分割 详解
  3. Android/Linux招聘要求
  4. [乡土民间故事_徐苟三传奇]第廿三回_吃蒸肉财主受捉弄
  5. 计算机其它离的360云盘,win7系统将360云盘文件快速转移到百度云盘的方法
  6. linux操作系统是著名的分布式系统,紫光展锐操作系统生态覆盖 Android、Linux、RTOS,面向分布式、智能化...
  7. outlook企业邮箱服务器要多少钱,怎么把企业邮箱配置到outlook中
  8. wx:key的使用及wx:key的值
  9. 深蓝词库转换1.9发布——支持英库拼音、搜狗bin格式、FIT、中州韵等
  10. 如何发送国际短信更便宜、更稳定?