第一章 暂停线程

1.暂停方法1: suspend()挂起线程->resume()继续执行

区别于stop()方法的销毁线程,如果想继续线程的运行必须start重启线程.suspend()只是让线程挂起,主线程任然执行,挂起的线程通过resume()即可继续执行.
suspend()与resume()缺点1:独占
如果忘记了thread1.suspend()之后thread1.resume(),这个thread1就会永远suspend挂起状态,独占锁无法释放.并且由于独占,main方法从上往下执行(也可能被卡住),thread1挂起

main:
	MyThread thread1=new MyThread();
	thread1.start();
	Thread.sleep(2000)
	thread1.suspend();
	System.out.Println("main end");
MyThread(thread1):
	run(){
		while(true){
			i++;
			System.out.Println(i);
		}
	}
System.out.Println(i)中的Println:
	public void println(long x){
		synchronized(this){
			print(x);
			newLine();
		}
	}

​ 这里由于 thread1被suspend了,所以MyThread中的Println暂停,锁未释放,这里的this锁指向的是Println所在类.thread1被suspend了,但是main依然要执行,但是当main执行到System.out.Println("main end");时,Println也要获取thread1中独占的Println所在类的this锁,这时候main获取不到锁也会blocked,无法输出main end

​ suspend()与resume()缺点2: 数据不完整

​ 如果线程setValue过程中suspend(),那么赋值操作将不具有原子性

2.yield()方法

​ 放弃当前CPU资源,让其他任务占用CPU资源,可能刚放弃就重新获取CPU资源

3.线程优先级

​ 优先级Priority分为1-10

​ 优先级继承性:线程A启动B,则B优先级和A相同

​ 优先级随机性:并不一定优先级高的都全部执行完,只是大概率分布在高优先级的先执行完而已

这本书略基础,就极致缩减了,后期有好文章再吸收后增加内容

posted @ 2020-08-01 21:39  zhangzeyuan  阅读(151)  评论(0)    收藏  举报