开始“复习”多线程啦,希望接下来,能把列出来的这些东西一一填满。hh,也算是给不知道怎么学多线程的小伙伴一个方向吧。有实践,有理论。学完也算是半个大佬了…至于另外半个,怎么不得结合数据库的事务学习下…
多线程基础
1. Java中的并发包
1.1 ThreadLocal关键字
- 使用场景
- 实例在方法中共享
- 实现在线程间不共享
- 总结来说,就是一个全局变量。
- 演示实例
package Thread;
public class ThreadLocalTest {
private static ThreadLocal<String> localVar = new ThreadLocal<String>();
private static String s;
static void print(String str) {
System.out.println(str + " :" + localVar.get());
localVar.remove();
System.out.println(s);
}
public static void main(String[] args) throws InterruptedException {
new Thread(new Runnable() {
public void run() {
s = "I am A";
ThreadLocalTest.localVar.set("local_A");
try {
Thread.sleep(1000);
} catch ( Exception e) {
e.printStackTrace();
}
print("A");
System.out.println("after remove : " + localVar.get());
}
}).start();
new Thread(new Runnable() {
public void run() {
ThreadLocalTest.localVar.set("local_B");
s = "I am B";
print("B");
System.out.println("after remove : " + localVar.get());
}
}).start();
}
}
- 使用实例
private static final ThreadLocal threadSession = new ThreadLocal();
public static Session getSession() throws InfrastructureException {
Session s = (Session) threadSession.get();
try {
if (s == null) {
s = getSessionFactory().openSession();
threadSession.set(s);
}
} catch (HibernateException ex) {
throw new InfrastructureException(ex);
}
return s;
}
1.2 原子类
1.3 线程安全集合
1.4 同步队列
1.5 同步器
1.6 线程池
1.7 锁与等待和阻塞
- 让出处理器的关键字
- Thread.sleep()
- Thread.yield()
- Thread.interrupt()
- Thread.join()
- wait();
- await();
2. 操作系统进程互斥的实现
需要满足的原则:
3. Java线程模型
3.1 线程实现
3.1 内存模型
3.2 实现模型
3.2 线程状态
3.3 线程调度
3.4 线程通信/线程同步
4. Java线程安全模型
5. 经典线程同步模型
1. 读者写者问题
2. 吸烟者
3. 生产者消费者
4. 多生产者消费者
5. 哲学家进餐
6. 死锁
7. 管程
|