java多线程-概念&创建启动&中断&守护线程&优先级&线程状态(多线程编程之一)
今天开始就来总结一下Java多线程的基础知识点,下面是本篇的主要内容(大部分知识点参考java核心技术卷1):
- package com.zejian.test;
- /**
- * @author zejian
- * @time 2016年3月11日 下午9:57:44
- * @decrition 继承Thread实现线程
- */
- public class ThreadByEx extends Thread{
- /**
- * 重写run方法
- */
- @Override
- public void run() {
- System.out.println("I'm a thread that extends Thread!");
- }
- }
实现Runnable接口重写run方法:
- package com.zejian.test;
- /**
- * @author zejian
- * @time 2016年3月11日 下午10:00:36
- * @decrition 实现Runnable接口重写run方法
- */
- public class ThreadByRunnable implements Runnable{
- /**
- * 实现run方法
- */
- @Override
- public void run() {
- System.out.println("I'm a thread that implements Runnable !");
- }
- }
怎么启动线程?
- package com.zejian.test;
- public class MainTest {
- public static void main(String[] args) {
- //继承Thread启动的方法
- ThreadByEx t1=new ThreadByEx();
- t1.start();//启动线程
- //实现Runnable启动线程的方法
- ThreadByRunnable r = new ThreadByRunnable();
- Thread t2 =new Thread(r);
- t2.start();//启动线程
- }
- }
运行结果:
- I'm a thread that extends Thread!
- I'm a thread that implements Runnable !
- Thread.currentThread().isInterrupted()
- while(!Thread.currentThread().isInterrupted()){
- do something
- }
但是如果此时线程处于阻塞状态(sleep或者wait),就无法检查中断状态,此时会抛出如果每次迭代之后都调用sleep方法(或者其他可中断的方法),isInterrupted检测就没必要也没用处了,如果在中断状态被置位时调用sleep方法,它不会休眠反而会清除这一休眠状态并抛出InterruptedException。所以如果在循环中调用sleep,不要去检测中断状态,只需捕获InterruptedException。代码范例如下:
- while(more work to do ){
- try {
- Thread.sleep(5000);
- } catch (InterruptedException e) {
- //thread was interrupted during sleep
- e.printStackTrace();
- }finally{
- //clean up , if required
- }
- }
- void myTask(){
- ...
- try{
- sleep(50)
- }catch(InterruptedException e){
- ...
- }
- }
正确的处理方式:
- void myTask()throw InterruptedException{
- sleep(50)
- }
或者
- void myTask(){
- ...
- try{
- sleep(50)
- }catch(InterruptedException e){
- Thread.currentThread().interrupt();
- }
- }
- package com.zejian.test;
- /**
- * @author zejian
- * @time 2016年3月12日 上午10:42:19
- * @decrition 守护线程代码示例
- */
- public class Demon {
- public static void main(String[] args) {
- Thread deamon = new Thread(new DaemonRunner(),"DaemonRunner");
- //设置为守护线程
- deamon.setDaemon(true);
- deamon.start();//启动线程
- }
- static class DaemonRunner implements Runnable{
- @Override
- public void run() {
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }finally{
- System.out.println("这里的代码在java虚拟机退出时并不一定会执行哦!");
- }
- }
- }
- }
os系统或者Ubuntu系统........
- 同步阻塞(Blocked):运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池中。
(5). 死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期。
java多线程-概念&创建启动&中断&守护线程&优先级&线程状态(多线程编程之一)的更多相关文章
- [Xcode 实际操作]八、网络与多线程-(21)延时启动画面:使用Thread线程对象的延时方法
目录:[Swift]Xcode实际操作 本文将演示如何使用线程对象的延时方法,让线程休眠一段时间,暂停动作的执行. 在项目导航区,打开启动画面的故事板[LaunchScreen.storyboard] ...
- C#多线程实践——创建和开始使用
线程用Thread类来创建, 通过ThreadStart委托来指明方法从哪里开始运行.ThreadStart的声明如下: public delegate void ThreadStart(); 调用S ...
- shell脚本(多线程批量创建用户)
shell脚本中的多线程 很多场景中会用到多线程,例如备份数据库,有100个库,正常备份效率极其低下.有了多线程原本可能需要10个小时备份,现在分10个线程同时去干,只要一个小时就解决了.今天就介绍下 ...
- day06 Socket_线程API_线程并发安全
使用多线程实现多客户端连接服务端 流程图 服务端代码改造: package socket; import java.io.BufferedReader; import java.io.IOExcept ...
- 线程优先级,设置,setPriority()方法
package seday08.thread;/** * @author xingsir * 线程优先级 * 线程启动后纳入到线程调度,线程时刻处于被动获取CPU时间片而无法主动获取.我们可以通过调整 ...
- -1-5 java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁 sleep()和wait()方法的区别 为什么wait(),notify(),notifyAll()等方法都定义在Object类中
本文关键词: java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁 sleep()和wait()方法的区别 为什么wait( ...
- java 多线程:Thread类常用方法:setPriority优先级、interrupt中断标记、suspend暂停与唤醒resume(已过时);daemon守护线程
常用方法: boolean isAlive() 测试此线程是否存活. boolean isDaemon() 测试此线程是否为守护程序线程. static void sleep?(long millis ...
- Java并发1——线程创建、启动、生命周期与线程控制
内容提要: 线程与进程 为什么要使用多线程/进程?线程与进程的区别?线程对比进程的优势?Java中有多进程吗? 线程的创建与启动 线程的创建有哪几种方式?它们之间有什么区别? 线程的生命周期与线程控制 ...
- Java多线程系列--“基础篇”10之 线程优先级和守护线程
概要 本章,会对守护线程和线程优先级进行介绍.涉及到的内容包括:1. 线程优先级的介绍2. 线程优先级的示例3. 守护线程的示例 转载请注明出处:http://www.cnblogs.com/skyw ...
随机推荐
- 17965 幸运之星(优先做) 约瑟夫环问题O(n)
17965 幸运之星(优先做) 时间限制:100MS 内存限制:65535K 提交次数:0 通过次数:0 题型: 编程题 语言: G++;GCC;VC Description 每年新年派对的最后 ...
- 性能测试工具Jmeter11-Jmeter图形监控扩展
插件下载地址:http://jmeter-plugins.org/downloads/all/ 1.首先将JmeterPluging.jar包复制到Jmeter的Lib目录下面的ext目录下面,然后重 ...
- [转]js 判断图片存在
转自:http://blog.csdn.net/qq415734794/article/details/7261479 .//检查图片是否存在 .function CheckImgExists(img ...
- c++关于map的find和count的使用
编程的时候比较常用,今天记录一下,以后备用. 使用count,返回的是被查找元素的个数.如果有,返回1:否则,返回0.注意,map中不存在相同元素,所以返回值只能是1或0. 使用find,返回的是被查 ...
- Bootsrap Table表格分页
一 bootsrap简介 Bootstrap,来自 Twitter,是目前很受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加 ...
- vue学习第四天 ------ 临时笔记
1.驼峰写法 在html标签中,由于html的特性是不区分大小写(比如LI和li是一样的),因此,html标签中要传递的值要写成短横线式的(如btn-test),以区分大小写. 在props的数组中, ...
- Linux 两组信号对比
博客逐步迁移到,独立博客,原文地址 http://www.woniubi.cn/two_groups_signal_difference/ 之前看信号的时候,没有太注意不同信号的对比.今天再次看到的时 ...
- SharePoint中低权限用户通过提升权限创建用户组
/// <summary> /// 提升权限创建用户组 /// </summary> /// <param name="groupname">用 ...
- 05、Spark
05.Spark shell连接到Spark集群执行作业 5.1 Spark shell连接到Spark集群介绍 Spark shell可以连接到Spark集群,spark shell本身也是spar ...
- oracle自动异地备份数据库
需求:实现oracle自动异地备份数据库 分析:1.oracle备份数据库 2.自动备份(定时) 3.非本地备份(因为如果备份到本地的话,如果硬件设备损坏可能导致数据丢失) 知识点:1.备 ...