概念:

  操作系统可以有多个进程,一个线程可以有一个或多个线程。进程与进程之间不共享内存,都在各自的空间中运行。而线程不仅可以共享内存,还可以用有一个自己的内存空间,叫做线程栈。

  线程又称轻量级进程。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常用方法的使用的更多相关文章

  1. Java线程sleep,yield,join,wait方法详解

    1.sleep() 当一个线程调用sleep方法后,他就会放弃cpu,转到阻塞队列,sleep(long millis)方法是Thread类中的静态方法,millis参数设定线程睡眠的时间,毫秒为单位 ...

  2. java之sleep(),join(),yield(),wait(),notify()、notifyAll()区别

    1.sleep() 使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁.也就是说如果有synchronized同步快,其他线程仍然不能访问共享数据.注意该方 ...

  3. java 线程方法join的简单总结

    虽然关于讨论线程join方法的博客已经很多了,不过个人感觉挺多都讨论得不够全面,所以我觉得有必要对其进行一个全面的总结. 一.作用 Thread类中的join方法的主要作用就是同步,它可以使得线程之间 ...

  4. java线程方法join的总结

    虽然关于讨论线程join方法的博客已经很多了,不过个人感觉挺多都讨论得不够全面,所以我觉得有必要对其进行一个全面的总结. 一.作用 Thread类中的join方法的主要作用就是同步,它可以使得线程之间 ...

  5. java 线程 wait join sleep yield notify notifyall synchronized

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 休息方法 : 在指定时间内 让该线程 暂停, 不会释放 锁标志. 等待方法: 让 该 线 ...

  6. java线程interrupt、interrupted 、isInterrupted区别

    前言 在分析interrupt之前,应该先了解java里线程有5种状态,其中有一个阻塞状态,interrupt和阻塞有关. interrupt() 方法 作用于要中断的那个线程. interrupt( ...

  7. (原创)确保JAVA线程安全的4种常用方法

    在Java中可以有很多方法来保证线程安全,比如使用同步方法.同步块,使用原子类(atomic concurrent classes),实现并发锁,使用volatile关键字,使用不变类和线程安全类. ...

  8. java 线程协作 join()

    在实际开发中我们往往会遇到这样的情况一个线程的执行需要依赖另一个线程执行后的结果.即主线程生成并起动了子线程,如果子线程里要进行大量的耗时的运算,主线程往往将于子线程之前结束,但是如果主线程处理完其他 ...

  9. java 线程方法 ---- join()

    class MyThread2 implements Runnable{ @Override public void run() { for (int i = 0; i < 5; i++){ S ...

随机推荐

  1. 文档在线预览开源实现方案二:OpenOffice + pdf.js

    文档在线预览的另一种实现方式采用的技术栈是OpenOffice + pdf.js, office文档转换为pdf的工作依然由OpenOffice的服务来完成,pdf生成后我们不再将其转换为其他文件而是 ...

  2. QQSpamerUpdate

    2.00001,0,http://oia5k1lqi.bkt.clouddn.com/QQSpamer2.0%20BETA1.exe

  3. qwt的安装与使用

    qwt简介 QWT,全称是Qt Widgets for Technical Applications,是一个基于LGPL版权协议的开源项目, 可生成各种统计图. 具体介绍,可参看官方网址:http:/ ...

  4. 计算机网络课程优秀备考PPT之第七章应用层(七)

    为了记录自己从2016.9~2017.1的<计算机网络>助教生涯,也为了及时梳理和整写笔记! 前期博客是, 计算机网络课程优秀备考PPT之第一章概述(一) 计算机网络课程优秀备考PPT之第 ...

  5. kali客户端攻击

    浏览器攻击 browser_autpwn2 (BAP2) mkdir /test 为接受响应的服务器创建目录   use auxiliary/server/browser_autopwn2  set ...

  6. [NEUQ-OJ] 1012 SZ斐波拉契数列

    一道水题,让我看清基础我的基础是多么薄弱. 递归,数组清零,数组名/变量名重复层出不穷...路漫漫啊.......... http://ncc.neuq.edu.cn/oj/problem.php?i ...

  7. js 判断是不是手机访问

    方法一: if(window.navigator.userAgent.toLowerCase().indexOf('mobile')==-1) { alert("pc端") } e ...

  8. 学习任务在继续...css...

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. ssh配置导致Ansible并发失败

    Ansible并发失败原因,  fork=100. 执行playbook时候没有并发 vim /usr/lib/python2.7/site-packages/ansible/runner/conne ...

  10. python基础-更新篇

    对于windows来说就很简单了: 下载最新版本的python,然后卸载老版本,重新安装即可 对于linux系统的主机来说就有点复杂了: 现在linux主机自带的python版本都使2.x版的,而且L ...