1.0线程 执行流程和方法

在这里插入图片描述因为cup 的时间片轮转机制,使得线程start () 后进入就绪状态,等待cpu分配好时间在运行。

yield();将线程从运行转到就绪状态 ,让出cpu时间片,但不会释放锁。//类似于重新排队

join();//类似于插队加入,将join()的线程,放到当前要执行的位置,直到该线程执行完,才会再次执行其他线程。

notify():通知一个在对象上等待的线程,使其从wait()方法返回,而返回的前提是该线程获取到了对象锁,没有获得锁的线程重新进入waiting状态

notifyAll(): 通知所有等待在对象上的线程

wait():调用该方法的线程进入 waiting 状态,只有等待另外的线程通知或被中断才会返回,需要注意,调用wait()方法后,会释放对象的锁

wait(long):超时等待一段时间,这里的参数时间是毫秒,如果没有通知就超时返回,

wait(long,int):对于超时时间可以更细粒度烦的控制,可以达到纳秒

等待和通知的标准:
01获取对象锁
02如果条件不满足,那么对象的wait()方法,被通知后仍要检查条件。
03条件满足则执行对应的逻辑。

synchronized(对象){
			while(条件不满足){
					对象.wait();
				}
}

在通过 wait()、notify()系列方法之前,线程必须要获得该对象的对象级别锁,即只能在同步方法或同步快中调用wait()方法、notify()系列方法,进入wait()方法后,当前线程释放锁,再从wait()前,线程与其他线程竞争获得锁,执行notify()系列方法的线程推出了调用了notifyAll 的synchronized代码块后,他们就会竞争。如果其中的一个线程获得了该对象的锁,他就会执行下去,当他退出代码块时,再释放锁,其他所有被唤醒烦人线程再竞争,直至所有被唤醒的线程都被执行完毕。

线程的优先级
useThread.setPriority(num); //默认为5,(1~10 一般为)理论上有用
设置线程优先级时,针对频繁阻塞(休眠或者I/O操作)的线程需要设置高优先级,而计算较多、用时较多的线程优先级应设置较低,确保处理器不会被独占。

守护线程 :被用作完成和支持工作,内存回收 等等被动启动的内部线程。
当主线程结束,守护线程也会结束。设置方法://useThread.setDaemon(true);
主线程结束, 守护线程中 finally 也不一定会执行。看时间片是否会分配

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值