文章目录开始“复习”多线程啦,希望接下来,能把列出来的这些东西一一填满。hh,也算是给不知道怎么学多线程的小伙伴一个方向吧。有实践,有理论。学完也算是半个大佬了…至于另外半个,怎么不得结合数据库的事务学习下…
- 多线程基础
- 1. Java中的并发包
- 1.1 ThreadLocal关键字
- 1.2 原子类
- 1.3 线程安全集合
- 1.4 同步队列
- 1.5 同步器
- 1.6 线程池
- 1.7 锁与等待和阻塞
- 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. 管程
- 使用场景
- 实例在方法中共享
- 实现在线程间不共享
- 总结来说,就是一个全局变量。
- 演示实例
package Thread;
public class ThreadLocalTest {
private static ThreadLocal<String> localVar = new ThreadLocal<String>(); // threadlocal的全局变量
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();
}
}
- 使用实例
- 存储用户的session
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 同步器
- countDownLanch
- barrier
- 让出处理器的关键字
- Thread.sleep()
- Thread.yield()
- Thread.interrupt()
- Thread.join()
- wait();
- await();
需要满足的原则:
- 空闲让进
- 忙则等待
- 优先等待
- 让权等待
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)