线程总结

来源:互联网 发布:摄影师证书含金量知乎 编辑:程序博客网 时间:2024/06/08 20:04
1 死锁:如果线程A持有锁L并且想获得锁M,线程B持有锁M并且想获得锁L,那么这两个线程将永远等待下去,这种情况就是最简单的死锁形式
2  wait()使线程停止运行,notify()使停止运行的线程继续运行。
3  为什么要使用多线程(异步,充分利用cpu)
1 1、发挥多处理器的强大能力 2 2、在单处理器系统上获得更高的吞吐率 3、建模的简单性 4、异步事件的简化处理
4 ThreadLocalMap里的是是线程自己要存储的对象,其他线程不需要去访问,也是访问不到的。
4.1、同步与ThreadLocal是解决多线程中数据访问问题的两种思路,前者是数据共享的思路,后者是数据隔离的思路
4.2、同步是一种以时间换空间的思想,ThreadLocal是一种空间换时间的思想


5 ReentrantLock中的方法  他可以实际启动顺序与运行顺序是一致的,
看到多线程中,锁定的方式有2种:synchronized和ReentrantLock。两种锁定方式各有优劣
synchronized是不公平锁,而ReentrantLock可以指定锁是公平的还是非公平的


6 Java多线程19:定时器Timer




155 所谓的多线程,指的是两个线程的代码可以同时运行
155 extends与runnable比较
。因为第一,继承只能但继承,实现可以多实现;第二,实现的方式对比继承的方式,也有利于减小程序之间的耦合。
156 CPU执行哪个线程的代码具有不确定性  调用start()方法的顺序不代表线程启动的顺序,线程启动顺序具有不确定性
157 main函数中加上Thread.sleep(100)的原因是为了确保Thread06的run()方法中的代码执行完
158 线程默认优先级为5 (最高的) 
159 线程类的构造方法、静态块是被main线程调用的,而线程类的run()方法才是应用线程自己调用的。在这个例子的基础上,再深入:
160 sleep与yield的区别
sleep:CPU还在执行当前线程run()方法中的代码,无非执行的内容是"睡觉"而已
yield:暂停当前执行的线程对象,并执行其他线程。这个暂停是会放弃CPU资源的,并且放弃CPU的时间不确定,有可能刚放弃,就获得CPU资源了,也有可能放弃好一会儿,才会被CPU执行。






11 锁的详解
当线程休眠(Sleep)的时候,是不会释放对象锁。 wait()使线程停止运行,释放锁
   可以把对象锁理解为资源,线程使用完这个资源后,会释放这个资源,以便其他线程来使用。
0 0