Thread多线程(二)

 

线程的五种状态:新生、就绪、执行、阻塞、死亡

 

终止线程的两种方式:

1、线程正常执行完毕

2、在线程中加入逻辑控制线程执行完毕:标识符

注意:不要使用stop、destroy方法终止线程

示例:利用标志位控制线程终止

public class FlagThread implements Runnable{
    private boolean flag = true ;
    private String name ;
    
    public FlagThread(String name) {
        this.name = name ;
    }
    
    @Override
    public void run() {
        int i=0 ;
        while(flag) {
            System.out.println(this.name + "-->" + i++);
        }
    }
    
    public void exit() {//对外提供一个方法终止线程
        this.flag = false ;
    }
    
    public static void main(String[] args) {
        FlagThread f = new FlagThread("线程一") ;
        new Thread(f).start(); 
        
        for(int i=0;i<50;i++) {
            if(i==47) {
                f.exit();
                System.out.println("线程终止.......");
            }
            System.out.println("main:"+i);
        }
    }
}
View Code

 

 

sleep方法:静态方法

1、指定时间为毫秒

2、要抛出一个异常InterruptedException

3、资源被锁定,sleep不会释放锁

4、时间到之后线程进入就绪状态

5、可以模拟网络延时、倒计时

 

yield:静态方法

1、礼让线程,让出CPU,让CPU调度重新调度,让当前正在执行线程暂停

2、不是阻塞线程,而是将线程从运行状态转入就绪状态

 

join:成员方法

如果线程对象①在线程②中调用了join方法,则线程②要在相应代码位置处等待线程①执行完毕,

才能继续执行线程②剩下的代码

示例:

public class Demo {
    public static void main(String[] args) throws InterruptedException {
        Thread t = new Thread(()->{
            for(int i=0;i<30;i++) {
                System.out.println("线程........"+i);
            }
        }) ;
        t.start();
        
        for(int i=0;i<30;i++) {
            if(i==20) {
                t.join();
            }
            System.out.println("main........."+i);
        }
    }
}

 

线程优先级

1、如果不使用,可以设置范围:1~10

2、先设置优先级,然后在启动

示例:

public class Demo2 implements Runnable {
    
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName()+"--->"+Thread.currentThread().getPriority());
        Thread.yield();
    }
    
    public static void main(String[] args) {
        System.out.println(Thread.currentThread().getName()+"--->"+Thread.currentThread().getPriority());
        Demo2 d = new Demo2() ;
        Thread t = new Thread(d) ;
        Thread t2 = new Thread(d) ;
        Thread t3 = new Thread(d) ;
        t.setPriority(Thread.MIN_PRIORITY);
        t2.setPriority(Thread.NORM_PRIORITY);
        t3.setPriority(Thread.MAX_PRIORITY);
        t.start();
        t2.start();
        t3.start();
    }
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

zwy

posted @ 2019-03-06 07:40  zwyk  阅读(63)  评论(0)    收藏  举报