Java 并发性和多线程
阅读目录
- 一、介绍
- 二、多线程的优点
- 三、多线程的代价
- 四、如何创建并运行 java 线程
- 五、竞态条件与临界区
- 六、线程安全与共享资源
- 七、线程安全及不可变性
- 八、Java 内存模型
- 九、Java同步块
- 十、线程通信
- 十一、死锁
- 十二、避免死锁
## 增加资源消耗
线程在运行的时候需要从计算机里面得到一些资源。除了CPU,线程还需要一些内存来维持它本地的堆栈。它也需要占用操作系统中一些资源来管理线程。我们可以尝试编写一个程序,让它创建 100 个线程,这些线程什么事情都不做,只是在等待,然后看看这个程序在运行的时候占用了多少内存。
回到顶部回到顶部回到顶部回到顶部回到顶部Java中的堆和栈的区别这张图演示了 Java 内存模型的逻辑视图。
每一个运行在 Java 虚拟机里的线程都拥有自己的线程栈。这个线程栈包含了这个线程调用的方法当前执行点相关的信息。一个线程仅能访问自己的线程栈。一个线程创建的本地变量对其它线程不可见,仅自己可见。即使两个线程执行同样的代码,这两个线程任然在在自己的线程栈中的代码来创建本地变量。因此,每个线程拥有每个本地变量的独有版本。
所有原始类型的本地变量都存放在线程栈上,因此对其它线程不可见。一个线程可能向另一个线程传递一个原始类型变量的拷贝,但是它不能共享这个原始类型变量自身。
堆上包含在 Java 程序中创建的所有对象,无论是哪一个对象创建的。这包括原始类型的对象版本。如果一个对象被创建然后赋值给一个局部变量,或者用来作为另一个对象的成员变量,这个对象任然是存放在堆上。
下面这张图演示了调用栈和本地变量存放在线程栈上,对象存放在堆上。
具体分析可详见文章:http://wiki.jikexueyuan.com/project/java-concurrent/java-memory-model.html
回到顶部回到顶部http://wiki.jikexueyuan.com/project/java-concurrent/thread-communication.html 回到顶部http://wiki.jikexueyuan.com/project/java-concurrent/deadlock.html 回到顶部http://wiki.jikexueyuan.com/project/java-concurrent/deadlock-prevention.html