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 ...
随机推荐
- UGUI [TextArea]
- 性能测试工具Jmeter08-Jmeter断言(检查点)
断言是在请求的返回层面增加一层判断机制.因为请求成功了,并不代表结果一定正确,因此需要检测机制提高测试准确性. 下面介绍常用的jmeter三种断言 1.响应断言 例如: 模式匹配规则 2.Size A ...
- eureka的一点细节
第二部分粗略的过一遍,还是有些模糊,再来相对系统的看一下: ---------------------------------------------------------------------- ...
- 比特币--私钥->公钥->钱包地址
脑钱包-字符串SHA256散列成256bit当做私钥-彩虹表 脑钱包是开源的程序-->用户输入字符串当做密码-->经过SHA256散列算法-->256长bit位 (即是私钥)--&g ...
- keepalived双机热备实现故障时发送邮件通知
目前项目已经采用nginx来实现负载均衡,但是nginx调度器只有一台,上次还意外的down机一次,导致整个服务应用全部瘫痪,这次准备再加一个调度器来实现站点高可用性,也就是常说的双机热备了. mas ...
- Unity C# ref与out
ref和out 都是按地址传递的,使用后都将改变原来的数值.ref 方法参数关键字使方法引用传递到方法的同一个变量.当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中.若要使用 r ...
- C# 解决 邮件发送Excel附件后,excel处于锁定状态
当使用c#自带的MailMessage类发送excel附件时,再次打开excel会提示处于锁定状态. 解决思路:Attachment是添加附件的类,邮件发送后没有释放该类 public string ...
- Java基础入门 - 关键字及其分类和说明
类别 关键字 说明 访问控制 private 私有的 protected 受保护的 public 公共的 类.方法和变量修饰符 abstract 声明抽象 class 类 extends 扩充,继承 ...
- 缩小javascript文件大小之缩编、混淆
写前端的相信都遇到过要提高网页的性能,其中javascript文件越小,浏览器的下载速度面对文件的读取和解析就更快.而一般我们在开发又需要一定的代码规范来使我们的代码更加的容易维护和读懂,但是大量空格 ...
- Java中mouseDragged有效mouseMoved没响应的可能原因
1.这个问题在jdk7与jdk8上都会出现. 2.具体表现为: 单独写个测试例子,用JFrame实现了mouseMoved接口,mouseDragged和mouseMoved都输出方法名和坐标,结果是 ...