线程

线程

1.相关词汇

Thread:线,线程
runnable:可追捕的
current:当前的,最近的
sleep:睡眠
yield:屈服,屈从
interrupted:中断的,被阻止的
daemon:后台程序
wait:等待,等候
notify:通报
synchronized:同步的(同一时刻只允许一个人访问,防止第二个访问的用户获取的数据是用户一修改的)

2.优先级
优先级较高的线程有更多获得CPU的机会,优先级的取值范围1~10,线程的默认优先级是5,通过setPriority和getPriority方法舍子或返回优先级。
MAX_PRIORITY:最大优先级    MIN_PRIORITY:最小优先级   NORM_PRIORITY:默认优先级

3.与线程状态相关的部分方法
    (1)等待线程终止
       final void join()
       throws InterruptedException
    (2)判断线程是否处于活动状态
       final boolean isAlive()
    (3)中断线程
       void interrupt()

4.sleep和yield的区别:
    (1).sleep给其他线程运行的机会,不考虑其他线程的优先级;yield只会让位给相同或更高优先级的线程。
    (2).线程执行了sleep方法后转到阻塞状态,执行了yield方法后转到就绪状态。
    (3).sleep方法可能抛出异常,yield不会。
    
5.join方法:用于等待其他线程结束,当前运行的线程可以调用另一线程的join方法,当前线程转到阻塞状态直到另一线程执行结束,它才会恢复运行。

6.多线程的验证
public class Test {
    public static void main(String[] args) {
        System.out.println("主方法开始");  //线程开始出现分支(多线程),thread与"主方法结束"同时进行,由谁先执行完决定输出顺序
        MyThread thread=new MyThread();
        thread.start();
        System.out.println("主方法结束");
    }
}

class MyThread extends Thread{
    public void run(){
        for(int i=0;i<=100;i++){
            System.out.println("i的值时:"+i);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
输出结果:  主方法开始
            主方法结束
            i的值时:0
            i的值时:1
            i的值时:2....
            
            
7.模拟来客泡茶过程

public class Test2 {
    public static void main(String[] args) throws InterruptedException {
        WashOp wo=new WashOp();
        BoilWaterOp bo=new BoilWaterOp();
        Thread t1=new Thread(bo,"烧水工");
        Thread t2=new Thread(wo,"洗碗工");
        t1.start();
        t2.start();
        t1.join();
        t2.join();  //等待该线程结束,才能执行下面的进程
        System.out.println("开始泡茶");
    }
}

class WashOp extends Thread{
    public void run(){
        for(int i=1;i<10;i++){
            System.out.println(Thread.currentThread().getName()+"在洗第"+i+"个杯子");
             try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
         System.out.println(Thread.currentThread().getName()+"杯子洗好了");
    }
}

class BoilWaterOp extends Thread{
    public void run(){
        System.out.println(Thread.currentThread().getName()+"开始烧水");
             try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
             System.out.println(Thread.currentThread().getName()+"水烧好了");
        }
}

输出结果:
烧水工开始烧水
洗碗工在洗第1个杯子
烧水工水烧好了
洗碗工在洗第2个杯子
洗碗工在洗第3个杯子
洗碗工在洗第4个杯子
洗碗工在洗第5个杯子
洗碗工在洗第6个杯子
洗碗工在洗第7个杯子
洗碗工在洗第8个杯子
洗碗工在洗第9个杯子
洗碗工杯子洗好了
开始泡茶
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值