1、java 线程与并发程序编写--线程本质

来源:互联网 发布:js面向对象例子 编辑:程序博客网 时间:2024/05/23 01:24

    很多同行在利用java开发时,普遍感觉其多线程机制,以及并发程序的编写存在诸多困难;同时java 5以后出现的并发特性,由于资料相对较少及深入度不足的原因,很多筒子们还是感觉一些困难,本系列文章力图从基础开始,全面及深入(吹吹)对其使用进行阐述,欢迎拍砖:

        可以将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(){@Overridepublic void run() {System.out.println("新 的线程开始");System.out.println("新 的线程结束");}}.start();//通知JVM分时执行上面的run方法System.out.println("main 的线程结束");}

    代码在第10行会通知JVM需要分时执行匿名线程对象的run方法中的代码67,即我们可以用专业的术语讲“让一个线程对象处于就绪状态(可执行态runnable)”,而此时JVM既可以选择继续执行当前线程也可以选择执行这个就绪线程(有自己的调度规则)。看下执行结果:可以说明“JVM现在并不是以流水线方式顺序执行四个打印语句”

main 的线程开始

main 的线程结束

新 的线程开始

新 的线程结束



原创粉丝点击