Java并发编程实战读书笔记

http://note.youdao.com/noteshare?id=3d02d4751355fbfcdda050442432d492&sub=B2D84548E3A74D2D8C0CC1AA2CEBF5F0点击打开链接
1.进程:进程是操作系统结构的基础;是一次程序的执行;是一个程序及其数据在处理机上顺序执行时所发生的活动;是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。
2.多线程是异步的,所以千万不要把Eclipse中代码的顺序当成线程执行的顺序,线程被调用的时机是随机的。
3.如果多次调用线程的start()方法,则会出现异常java.lang.IllegalThreadStateException
4.由于Thread.java类也实现了Runnable接口,因此也就意味着构造函数Thread(Runnable target) 不光可以传入Runnable接口的对象,还可以传入一个Thread类的对象,这样做完全可以将一个Thread对象中的run()方法交由其他的线程进行调用。
5.Thread:this.interrupted():测试当前线程是否已经是中断状态,执行后具有将状态标识值清除为false的功能;
this.isInterrupted():测试线程Thread对象是否已经是中断状态,但不清除状态标识。
6.在main方法中开启一个线程后可以使用interrupt()方法中断线程,然后运行到线程的run()方法时,可以在方法内通过interrupted()来判断线程状态然后抛异常结束掉run(),也 可以将异常向上抛,使线程停止的事件得以传播
7.使用interrupt()+Thread.sleep(time)终止线程
8.使用stop()暴力终止线程,不推荐使用,抛ThreadDeath异常,会释放锁导致同步方法执行流程错误。
9.使用interrupt()+return终止线程
10.suspend()和resume()方法可以暂停和恢复线程,也会因为独占锁可能导致锁死或者数据不同步,已过时。
11.yield()作用:放弃当前的CPU资源,将它交给其他的任务去占用CPU执行时间。但放弃的时间不确定,有可能刚放弃,马上又获得CPU时间片。
12.设置线程优先级有助于帮"线程规划器"确定在下一次选择哪一个线程来优先执行。Java的线程优先级具有继承性,比如A线程启动B线程,则B线程与A的优先级是一样的。线程的执行具有随机性,CPU尽量让高优先级的先执行,但不保证一定会先执行高优先级的。
13.方法中的变量不存在非线程安全问题,永远都是线程安全的。这是方法内部的变量都是私有的特性造成的,栈封闭。
14.A线程先持有object对象的lock锁,B线程可以以异步的方式调用object对象中的非synchronized类型的方法;(2)A线程先持有object对象的lock锁,B线程如果在这时调用object对象中的synchronized类型的方法则需要等待排队。
15. Java并发编程实战读书笔记_第1张图片
16."可重入锁":线程自己可以再次获取自己的内部锁。比如有1条线程获得了某个对象的锁,此时这个对象锁还没有释放,当其再次想要获取这个对象的锁的时候还是可以获取的,如果不可以锁重入的话,就会造成死锁。可重入锁也支持在父子类继承的环境中。
17.锁非this对象具有一定的优点:如果在一个类中有很多个synchronized方法,这时虽然能实现同步,但会受到阻塞,所以影响运行效率;但如果使用同步代码块锁非this对象,则synchronized(非 this)代码块中的程序与同步方法是异步的,不与其他锁this同步方法争抢this锁,则可大大提高效率。
18.关键字volatile主要作用就是:使变量在多个线程间可见。强制从公共堆栈中取得变量的值,而不是从线程私有数据栈中取得变量的值。
Java并发编程实战读书笔记_第2张图片
19. Java并发编程实战读书笔记_第3张图片
关键字解决的是多个线程之间访问资源的同步性。
20.
Java并发编程实战读书笔记_第4张图片
21.1)执行完同步代码块就会释放锁 。2)在执行同步代码块的过程中,遇到异常而导致线程终止,锁也会被释放。3)。在执行同步代码块的过程中,执行了锁所属对象的wait()方法,这个线程会释放对象锁,而此线程对象会进入线程等待池中,等待被唤醒。
22.wait()和notify()方法必须在同步代码块或同步方法中执行,wait()等待锁释放,而notify()方法会释放锁,但不是立即释放,而是将当前同步块执行完之后才会释放锁。
23.join()方法与interrupt()方法相遇就会发生异常。
24. join()方法内部使用wait()实现会释放锁,sleep(time)方法不会释放锁。
25.Java并发编程实战读书笔记_第5张图片
26. Java并发编程实战读书笔记_第6张图片27. Java并发编程实战读书笔记_第7张图片 Java并发编程实战读书笔记_第8张图片
28.TimerTask类的cancel()方法是将自身从任务队列中移除,其他任务不受影响。而Timer类中的cancel()方法的作用是将任务队列中的全部任务清空,并且进程被销毁。Timer类的cancel()方法有时并不一定会停止执行计划任务,因为有可能抢不到Timer内置queue的锁。
29. Java并发编程实战读书笔记_第9张图片
30. Java并发编程实战读书笔记_第10张图片














你可能感兴趣的:(java,读书笔记,并发编程实战)