1、java 线程与并发程序编写--线程本质
2011-11-21 11:56
351 查看
很多同行在利用java开发时,普遍感觉其多线程机制,以及并发程序的编写存在诸多困难;同时java 5以后出现的并发特性,由于资料相对较少及深入度不足的原因,很多筒子们还是感觉一些困难,本系列文章力图从基础开始,全面及深入(吹吹)对其使用进行阐述,欢迎拍砖:
可以将JVM理解为一台计算机,而其包括“内存和CPU时间”资源。那么某个对象实例的方法执行可以理解为:“在其方法执行栈中(内存),利用JVM的时段(时间)来运行”。
没接触线程时,可以认为JVM的全部时间归方法在执行期间全部占用(当然还会有一个gc的线程,在JVM上执行)。
多线程程序编写的第一个要理解的是:如何使用JDK中的API“通知”JVM,代码是要“分时并发”运行的。
其“原始”的核心API为:Thread。我们就是用它的实例的“start()方法”来“通知”JVM,其中的“void run()”方法中的代码,是“分时并发执行”的(呵呵,不能调用run,否则JVM不会知道它是要分时执行的)。
代码1-1:
代码在第10行会通知JVM需要分时执行匿名线程对象的run方法中的代码6,7行,即我们可以用专业的术语讲“让一个线程对象处于就绪状态(可执行态runnable)”,而此时JVM既可以选择继续执行当前线程也可以选择执行这个就绪线程(有自己的调度规则)。看下执行结果:可以说明“JVM现在并不是以流水线方式顺序执行四个打印语句”
main 的线程开始
main 的线程结束
新 的线程开始
新 的线程结束
可以将JVM理解为一台计算机,而其包括“内存和CPU时间”资源。那么某个对象实例的方法执行可以理解为:“在其方法执行栈中(内存),利用JVM的时段(时间)来运行”。
没接触线程时,可以认为JVM的全部时间归方法在执行期间全部占用(当然还会有一个gc的线程,在JVM上执行)。
多线程程序编写的第一个要理解的是:如何使用JDK中的API“通知”JVM,代码是要“分时并发”运行的。
其“原始”的核心API为:Thread。我们就是用它的实例的“start()方法”来“通知”JVM,其中的“void run()”方法中的代码,是“分时并发执行”的(呵呵,不能调用run,否则JVM不会知道它是要分时执行的)。
代码1-1:
public static void main(String[] args) { System.out.println("main 的线程开始"); new Thread(){ @Override public void run() { System.out.println("新 的线程开始"); System.out.println("新 的线程结束"); } }.start();//通知JVM分时执行上面的run方法 System.out.println("main 的线程结束"); }
代码在第10行会通知JVM需要分时执行匿名线程对象的run方法中的代码6,7行,即我们可以用专业的术语讲“让一个线程对象处于就绪状态(可执行态runnable)”,而此时JVM既可以选择继续执行当前线程也可以选择执行这个就绪线程(有自己的调度规则)。看下执行结果:可以说明“JVM现在并不是以流水线方式顺序执行四个打印语句”
main 的线程开始
main 的线程结束
新 的线程开始
新 的线程结束
相关文章推荐
- 2、java 线程与并发程序编写--Thread与Runnable的纠结
- 3、java 线程与并发程序编写--如何让线程体面的死去
- Fork and Join: Java也可以轻松地编写并发程序
- Fork and Join: Java也可以轻松地编写并发程序
- Fork and Join: Java也可以轻松地编写并发程序
- 编写高质量代码:改善Java程序的151个建议(第8章:多线程和并发___建议126~128)
- Java高并发程序-Chapter2 Java并行程序基础 (第四讲)进程和线程
- Java高并发程序-Chapter3 JDK并发包(第十九讲)线程复用:线程池
- 编写高质量代码:改善Java程序的151个建议(第8章:多线程和并发___建议122~125)
- Fork and Join: Java也可以轻松地编写并发程序
- Fork and Join: Java编写并发程序(重要)
- Fork and Join: Java也可以轻松地编写并发程序
- Android Java 并发程序系列----你应该知道的线程一
- 【Java】线程并发拷贝程序
- Java高并发程序-Chapter2 Java并行程序基础 (第五讲)线程的基本操作
- Java非阻塞(NIO)编写高并发网络程序
- Android Java 并发程序系列----你应该知道的线程二
- Java高并发程序-Chapter2 Java并行程序基础 (第八讲)线程组 、守护线程、线程优先级
- 编写高质量代码:改善Java程序的151个建议(第8章:多线程和并发___建议118~121)
- Fork and Join: Java也可以轻松地编写并发程序