首页 > 代码库 > Java线程--interrupt join yield setDaemon常用方法的使用

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

 

哪些操作可以使线程进入阻塞状态?

  Jion()、yield 、wait() 、sleep()、I/O

 

Java线程--interrupt join yield setDaemon常用方法的使用