Java多线程由易到难
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多线程由易到难相关推荐
- Java面试题 详解 由易到难
目录 1. Java 基础 2. 容器 3. 多线程 4. 反射 5. 对象拷贝 6. Java Web 7. 异常 8. 网络 9. 设计模式 10. Sprin ...
- 40个Java多线程问题总结
(转) 这篇文章作者写的真是不错 40个问题汇总 1.多线程有什么用? 一个可能在很多人看来很扯淡的一个问题:我会用多线程就好了,还管它有什么用?在我看来,这个回答更扯淡.所谓"知其然知其所 ...
- java多线程编程01---------基本概念
一. java多线程编程基本概念--------基本概念 java多线程可以说是java基础中相对较难的部分,尤其是对于小白,次一系列文章的将会对多线程编程及其原理进行介绍,希望对正在多线程中碰壁的小 ...
- Java多线程发展简史
摘自: http://www.raychase.net/698 这篇文章,大部分内容,是周五我做的一个关于如何进行Java多线程编程的Knowledge Sharing的一个整理,我希望能对Java从 ...
- 史上最全 Java 多线程面试题及答案
这篇文章主要是对多线程的问题进行总结的,因此罗列了40个多线程的问题. 这些多线程的问题,有些来源于各大网站.有些来源于自己的思考.可能有些问题网上有.可能有些问题对应的答案也有.也可能有些各位网友也 ...
- ***JAVA多线程和并发基础面试问答
多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一.在这里,从面试的角度列出了大部分重要的问题,但是你仍然应该牢固的掌握Java多线程基础知识来对应日后碰到的问题.(校对注:非常赞同这个观 ...
- 顶级Java多线程面试题及回答
1)现在有T1.T2.T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行? 这个线程问题通常会在第一轮或电话面试阶段被问到,目的是检测你对"join"方法是否熟 ...
- Java多线程笔记(零):进程、线程与通用概念
前言 不积跬步,无以至千里:不积小流,无以成江海.在学习Java多线程相关的知识前,我们首先需要去了解一点操作系统的进程.线程以及相关的基础概念. 进程 通常,我们把一个程序的执行称为一个进程.反过来 ...
- [转] Java多线程发展简史
这篇文章,大部分内容,是周五我做的一个关于如何进行Java多线程编程的Knowledge Sharing的一个整理,我希望能对Java从第一个版本开始,在多线程编程方面的大事件和发展脉络有一个描述,并 ...
- Java多线程编程模式实战指南(二):Immutable Object模式--转载
本文由本人首次发布在infoq中文站上:http://www.infoq.com/cn/articles/java-multithreaded-programming-mode-immutable-o ...
最新文章
- 递归/回溯:subsets求子集
- 重磅~ 深度学习中的图像分割:方法和应用
- android 中文 API (41) —— RatingBar.OnRatingBarChangeListener
- 业内首发,ACK@Edge支持高质量加密网络与精细化管理
- python设置word背景色_Python数据可视化:WordCloud入门
- java调用c视频接口_JAVA本地调用(JNI- java调用c)
- linux内核那些事之mempolicy(1)
- java 将一串字符串 转换成_简单几步,教你如何轻松的将Java中的字符串转换为Integer,你学会了吗?...
- Epic:把虚幻引擎推向所有游戏平台
- 非结构化数据上下文中的GraphQL
- PHP在微博优化中的“大显身手”
- git入门:安装配置 创建版本库
- python坐标系教程_python Shapely使用指南详解
- 下载并安装lsi MegaRAID raid卡 管理工具
- 基于 Java 机器学习自学笔记 (第66至68天:主动学习之ALEC)
- ardruino控制继电器_arduino控制继电器
- Linux驱动学习--HCI框架及源码分析
- 外包php技术,php外包
- 物联网安全攻防的“线上幽灵”
- 低噪声与功放选型购买
热门文章
- ASP.NET内容总结
- Allegro 铜皮分割 详解
- Android/Linux招聘要求
- [乡土民间故事_徐苟三传奇]第廿三回_吃蒸肉财主受捉弄
- 计算机其它离的360云盘,win7系统将360云盘文件快速转移到百度云盘的方法
- linux操作系统是著名的分布式系统,紫光展锐操作系统生态覆盖 Android、Linux、RTOS,面向分布式、智能化...
- outlook企业邮箱服务器要多少钱,怎么把企业邮箱配置到outlook中
- wx:key的使用及wx:key的值
- 深蓝词库转换1.9发布——支持英库拼音、搜狗bin格式、FIT、中州韵等
- 如何发送国际短信更便宜、更稳定?