Java线程--interrupt join yield setDaemon常用方法的使用
概念:
操作系统可以有多个进程,一个线程可以有一个或多个线程。进程与进程之间不共享内存,都在各自的空间中运行。而线程不仅可以共享内存,还可以用有一个自己的内存空间,叫做线程栈。
线程又称轻量级进程。Java的线程是靠CPU时间片的快速切换实现的,并不是真正的同时进行。每个线程有独立的线程栈和程序计数器。线程在自己的栈中存储变量,使数据互不干扰,对于共同资源,容易引发并发问题,需要同步处理。
创建线程常用的两种方式:
1、继承Thread类,重写run()
2、实现Runnable接口
线程生命周期:创建--就绪--运行--阻塞--死亡

note:
1、线程的调度基于时间片基础上的优先级优先原则,注意即使setPriority()也不一定完全按照顺序执行
2、线程进入Runnable(可运行状态,就绪状态),并不意味着它立即执行。
jion:调用其它线程。当前线程调用其它线程的jion()方法,使自己进入中断状态,必须等待调用的线程执行完,才能进入就绪状态(并不立即运行)。
code:
public class Test {
public static void main(String[] args) {
MyThread m = new MyThread();
Thread t = new Thread(m);
t.start();
int i=0;
while(i++<100){
if(i==50){
try {
t.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("main:"+i);
}
}
}
class MyThread implements Runnable{
int i=0;
public void run() {
while(i++<50){
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("my thread: "+i);
}
}
}
yield: 暂停当前线程,yield() 为静态方法,功能是暂停当前正在执行的线程对象,并执行其他线程。当前线程变为就绪状态,也就是说某线程调用yield()方法后可能还运行此线程(表现为未暂停)(仅个人看法,尚未看到哪里有对此的说明,可能存在误解)。
code:
public class Test {
public static void main(String[] args) {
Thread t1 = new MyThread();
t1.start();
for(int i=0; i<100; i++){
System.out.println(i);
}
}
}
class MyThread extends Thread {
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println("MyThread"+i );
Thread.yield();
}
}
}
interrupt: 中断线程。将会设置该线程为中断状态,即设置为true。线程会不时地检测这个中断标识位,以判断线程是否应该被中断。线程可以调用另外一个线程的interrupt方法,这将向暂停的线程发出一个InterruptedException。
isinterrupted:判断线程是否中断,不会清除中断状态
interruped:返回线程上次的中断状态,并清除中断标志位,即重新设置为false
结束线程方式:
1. 使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。
2. 使用stop方法强行终止线程(这个方法不推荐使用,因为stop和suspend、resume一样,也可能发生不可预料的结果)。
3. 使用interrupt方法中断线程。(中断不会结束线程,但可以利用异常处理是线程结束)
哪些操作可以使线程进入阻塞状态?
Jion()、yield 、wait() 、sleep()、I/O
Java线程--interrupt join yield setDaemon常用方法的使用的更多相关文章
- Java线程sleep,yield,join,wait方法详解
1.sleep() 当一个线程调用sleep方法后,他就会放弃cpu,转到阻塞队列,sleep(long millis)方法是Thread类中的静态方法,millis参数设定线程睡眠的时间,毫秒为单位 ...
- java之sleep(),join(),yield(),wait(),notify()、notifyAll()区别
1.sleep() 使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁.也就是说如果有synchronized同步快,其他线程仍然不能访问共享数据.注意该方 ...
- java 线程方法join的简单总结
虽然关于讨论线程join方法的博客已经很多了,不过个人感觉挺多都讨论得不够全面,所以我觉得有必要对其进行一个全面的总结. 一.作用 Thread类中的join方法的主要作用就是同步,它可以使得线程之间 ...
- java线程方法join的总结
虽然关于讨论线程join方法的博客已经很多了,不过个人感觉挺多都讨论得不够全面,所以我觉得有必要对其进行一个全面的总结. 一.作用 Thread类中的join方法的主要作用就是同步,它可以使得线程之间 ...
- java 线程 wait join sleep yield notify notifyall synchronized
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 休息方法 : 在指定时间内 让该线程 暂停, 不会释放 锁标志. 等待方法: 让 该 线 ...
- java线程interrupt、interrupted 、isInterrupted区别
前言 在分析interrupt之前,应该先了解java里线程有5种状态,其中有一个阻塞状态,interrupt和阻塞有关. interrupt() 方法 作用于要中断的那个线程. interrupt( ...
- (原创)确保JAVA线程安全的4种常用方法
在Java中可以有很多方法来保证线程安全,比如使用同步方法.同步块,使用原子类(atomic concurrent classes),实现并发锁,使用volatile关键字,使用不变类和线程安全类. ...
- java 线程协作 join()
在实际开发中我们往往会遇到这样的情况一个线程的执行需要依赖另一个线程执行后的结果.即主线程生成并起动了子线程,如果子线程里要进行大量的耗时的运算,主线程往往将于子线程之前结束,但是如果主线程处理完其他 ...
- java 线程方法 ---- join()
class MyThread2 implements Runnable{ @Override public void run() { for (int i = 0; i < 5; i++){ S ...
随机推荐
- Map - leetcode [哈希表]
149. Max Points on a Line unordered_map<float, int> hash 记录的是斜率对应的点数 unordered_map<float, i ...
- 【Time系列五】个性时钟与秒表升级版
从昨天到现在,一直在研究这个看起来超级简单的时钟.界面非常简洁大方. 虽然是简单,可是这个对齐的问题还是把我整得一塌糊涂.谁叫作者不解释清楚的. 参考:http://bbs.fishc.com/thr ...
- Android之HandlerThread
HandlerThread详解 1 HandlerThread基本原理 HandlerThread继承自Thread,它是一种可以使用Handler的Thread.它的实现很简单,就是在run方法中通 ...
- XTU 1243 2016
$2016$长城信息杯中国大学生程序设计竞赛中南邀请赛$A$题 循环节. 循环节为$2016$,从数据范围以及题目中的一句话也能间接的体会出应该是有循环节的,并且循环节可能是$2016$. Feel ...
- iOS错误之-Presenting view controllers on detached view controllers is discouraged
遇到这个警告后找了一下网络资源,基本上只说通过 [self.view.window.rootViewController presentViewController:controller animat ...
- 窗口、easyui-window、easyui-panel、easyui-linkbutton
//窗口 <script type="text/javascript" src="js/jquery.min.js"></script> ...
- yii2.0单文件上传和多文件上传
yii2文件上传使用到yii2自带的文件上传类UploadFIle,以及对应的模型规则,这里分别介绍单文件上传和多文件上传: yii2单个文件上传: 上传步奏,先创建上传表单模型model(包含验证规 ...
- jquery如何获取url中问号后面的数值
假如路径是这样的:www.domain.com/list/?menu=1 var locationUrl = location.search.substring(6); switch(location ...
- 快速排序(js版本)
快速排序的时间复杂度为:O(n*log2n),相比较其他O(n2)的排序算法,还是比较有优势的.原文参考在此处,因为本人对原文的一小段代码有点不理解,所以进行了小的修改. 1.基本思想:在数组的第一个 ...
- 3.Thread中的静态方法
1.currentThread() public class Thread14 extends Thread{ static { System.out.println("静态块的打印:&qu ...