zoukankan      html  css  js  c++  java
  • java中多线程执行时,为何调用的是start()方法而不是run()方法

    线程的状态

    1. 初始(NEW):新创建了一个线程对象,但还没有调用start()方法。
    2. 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。
    线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(ready)。就绪状态的线程在获得CPU时间片后变为运行中状态(running)。
    3. 阻塞(BLOCKED):表示线程阻塞于锁。
    4. 等待(WAITING):进入该状态的线程需要等待其他线程做出一些特定动作(通知或中断)。
    5. 超时等待(TIMED_WAITING):该状态不同于WAITING,它可以在指定的时间后自行返回。
    6. 终止(TERMINATED):表示该线程已经执行完毕。

    Thead类中start()方法和run()方法的区别

     1,start()用来启动一个线程,当调用start()方法时,系统才会开启一个线程,通过Thead类中start()方法来启动的线程处于就绪状态(可运行状态),此时并没有运行,一旦得到CPU时间片,就自动开始执行run()方法。此时不需要等待run()方法执行完也可以继续执行下面的代码,所以也由此看出run()方法并没有实现多线程。 

    2,run()方法是在本线程里的,只是线程里的一个函数,而不是多线程的。如果直接调用run(),其实就相当于是调用了一个普通函数而已,直接待用run()方法必须等待run()方法执行完毕才能执行下面的代码,所以执行路径还是只有一条,根本就没有线程的特征,所以在多线程执行时要使用start()方法而不是run()方法。

    3,把需要处理的代码放到run()方法中,start()方法启动线程将自动调用run()方法,这个由java的内存机制规定的。并且run()方法必需是public访问权限,返回值类型为void。

    4,当程序调用start方法一个新线程将会被创建,并且在run方法中的代码将会在新线程上运行

  • 相关阅读:
    10 个最佳的网站分析方法
    网站优化:测试网站速度的8款免费工具推荐
    8 个最棒的 .NET 开发相关工具
    10 个文件和文档的比较工具
    asp.net中调用javascript自定义函数的方法(包括引入JavaScript文件)总结
    如何在ashx页面获取Session值
    java-信息安全(十一)-非对称加密算法ECC
    java-信息安全(十)-数字签名算法DSA
    java-信息安全(九)-基于DH,非对称加密,对称加密等理解HTTPS
    java-信息安全(八)-迪菲-赫尔曼(DH)密钥交换
  • 原文地址:https://www.cnblogs.com/hoganhome/p/14498332.html
Copyright © 2011-2022 走看看