线程的调度与控制 线程的生命周期

/*

线程的调度与控制:

                一般计算机中只有一个CPUcpu在执行某条指令,线程才得到了CPU的时间片,也就是使用权。

                在单cpu上,线程不是并行运行的,只有在多cpu上,线程才是并行运行的 ,jvm要负责线程的调度

                取得CPU的使用权

                两种调度模式:

                        一种是分时调度:轮流使用,平均分配CPU的时间片

                        抢占调度:让优先级高的使用CPU,如果优先级相同,随机选择。 java        抢占式,优先级高的线程获取CPU的时间片相对多一点

                          

                        线程的优先级:

                                MAX_PROVIRTY(10) MIN_PROVIRTY(1) NORMAL_PROVIRTY(5) (1-10)                        

                函数:

                        currentThread() //获取当前线程对象                 Thread t=Thread.currentThread();

                        setName() //设置线程的名字 t.setName()

                        getName() //获取线程的名字 t.getName()

*/

   

//创建

Thread t=new Processor();

//启动

t.start();//这段代码执行瞬间结束,告诉jvm 再分配一个新的栈给 t线程

//run() 不需要程序员手动调用

//t.run();//这是普通方法调用,这样之后程序还是只有一个线程。run方法结束之后,下面的才能执行。

//在主线程中执行

for(int i=0;i<100;i++){

System.out.println("main-->"+"i");

}

   

//有了多线程之后,main 方法结束,是主线程中没有方法栈帧

//但是其他线程栈中可能还有栈帧

//所以可以得出结论,就是,main方法结束,可能程序还没有结束执行。

}

   

   

   

/*

线程的生命周期:

        新建 new

        就绪 start()

        阻塞

        运行 run()方法执行

        消亡 run()方法结束

*/

   

   

   

   

/*

线程优先级高的获取的cpu的时间片相对多一些

优先级:从1-10

最低:1

最高:10

默认:5

   

   

方法:

setPriority() 设置优先级

getPriority() 获取有优先级

   

*/

   

   

   

/*

某线程正在休眠,如何打断其休眠:

        interruptedException 以下方式靠的是异常处理机

*/

   

/*

Thread.sleep(毫秒)

        sleep 是一个静态方法,使用 类名.方法名 调用

        作用:阻塞当前线程。腾出cpu让给其他 线程

 

*/

class Processor04 extends Thread{

   

//run方法中的异常 只能用 try{}catch{} 实现

//thread 中的run方法不能抛出异常,所以重写后的run方法之后,在run的声明位置不能用throws

public void run(){

for(int i=0;i<50;i++){

System.out.println(Thread.currentThread().getName()+"i");

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

   

   

   

   

/*

        Thread.yield

                1.是一个静态的方法

                2.sleep 方法类似,只是不能由由用户指定休眠时间,并且这个yield方法只能让同优先级的线程

                3.让位的时间不固定

*/

   

   

/*

关于线程合并

join 是成员方法,必须使用 引用.调用

//线程合并

t.join();//join 出现在哪个线程,就和哪个线程合并,合并了就变成了单线程的程序

   

   

*/

   

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值