资源描述:
《java高并发程序设计》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、WAITZG下隔NATINGJava高并发程序设计第一课前沿•在计算密集型的领域中非常适用并行程序•多核CPU的产生促使了并行程序的设计,摩尔定律的失效,芯片的性能不能提高,4GHz已经是当下最高的频率,从而产生多核CPU的岀现。•活锁:两个资源A、B,进程1和2分别占用A和B时发现不能工作,就同时释放掉,然后又同时分别占用B和A如此反复!出现活锁•阻塞:第二课Java并行程序基础•线程是比进程更细粒度的执行单元,可以说是属于进程的一个子集一丁匕k/lANATFD7,Thread类的run()方法实现于Runnable接口z如果
2、直接调用run()方法,不会启动新的线程,而是在当前线程下运行,start()方法会开启一个新的线程。Threadt1wThread():t1.s^irt():Threadt1=newThreadf);t1run():/7不能开启线程Threadt仁newThrcad(}(Threadrun()的丈现target吕Runnable褛口publicvoidrun(){if(target!=null){target.wnn;>}@OverridepublicvoidlurKXSYStem-QUt.printlnC'Helto,Iam
3、tT■程序顺序原则:一个线程内保证语义的串行性b=a;1;■volatile规则:volatile变量的写,先发生于读,这保证了volatile变量的可见性■锁规则:解锁(unlock)必然发生在随后的加锁(lock)前■传性:A先于B,B先于C■那么A必然先于C■线程的start()方法先于它的每一个动作■线程的所有操作先于线程的终结(Threadjoin())■线程的中断(interruptQ)先于被中断线程的代码■对象的构造函数执行结束先于finalize。方法Java并发编程的的三个重要的概念原子性);)};tlThre
4、adt1=newThread(newCreateThread3());t1.start();两种方式,1重载run方法2,实现Ruanable接口&Thread.Interrupt()是一种也交的让线程终止的方法优雅的方法,不会立刻停止掉该程序,根据程序的设计,而是根据该程序的设计,当执行完该程序的一次循环之后,在下次循环程序开始之前中断,保证该程序的数据完整性。9,try{Thread・sleep(2000);}catch(InterruptedExceptione){////设置中断状态,抛出异常后会清除中断标记位e•pri
5、ntSZckTrace();}9,查看当前被挂起的进程命令jps查看进程中具体线程的信息jstack5880有等待该线程的线程。f(millis==0){while(isAlive()){wait(0);}}•谦让yield()12,守护线稈在后台默默的完成一些系统性的服务,比如垃圾冋收JIT线程等。但非守护线程结束时,JVM不会因为守护线程而继续执行,随之而推出。13,线程优先级的运行时候只是在概率上发生的可能下要大!14,synchronized加锁的三种方式。•对象实例加锁•实例方法加锁•类级别实例方法加锁第三课Java内
6、存模型和线程安全•同一个操作在两条不同的指令之间是不能够一起做的,因为他们会使用同一•个硕件设备.ATAGURU•可见性问题是各个层面优化产生的
7、Happen-Before规则可见性有序性,并发程序会发生指令璽排,导致语句执行顺序发生变化的悄况,虽然处理器会对指令进行重排序,但是它会保证程序最终结果会和代码顺序执行结果相同;指令重排序不会影响单个线程的执行,但是会影响到线程并发执行的正确性。・要想并发程序正确地执行,必须要保证原子性、可见性以及有序性。只要有一个没有被保证,就有可能会导致程序运行不正确。第四课无锁•无锁的性能要远
8、好于阻塞的执行方式•前导零是指转换成二进制的时候前面为零的个数(LcadingZcros)•无锁实现Stack堆栈,见作业第五课JDK并发包11.Reentrantlock是属于Synchronized的増强版,多增加了一些特有的功能2.ConcurrentHashMap属于高并发的解决方案3.HashMap发生大量冲突的时候,会退化成一个链表,引起性能降低4.BlockingQueue阻塞队列,会引起线程的阻塞,不是一个高性能的并发实现,内部实现机制采用了加锁,同时只有一个线程进入第六课JDK并发包21,线程池实现了对线程的复
9、用,避免了线程的多次创建和销毁,节省了CPU处理时间。2,Java内置线程池,Callable与Runnable的区别是有无返回值3,ForkJoinPool说明该线程池是如何工作的第七课设计模式1,采用静态内部类来实现单例模式,可以保证在StaticSingl