无法在这个位置找到: head2.htm
当前位置: 建站首页 > 新闻动态 > 行业新闻 >

Java多段程start()方式基本原理分析

时间:2021-04-02 03:29来源:未知 作者:jianzhan 点击:
1、为何起动进程无需run()方式只是应用start()方式run()方式仅仅一个类中的一般方式,启用run方式跟启用一般方式一样而start()是建立进程等一系列产品工作中,随后自身启用run里边

1、为何起动进程无需run()方式只是应用start()方式

run()方式仅仅一个类中的一般方式,启用run方式跟启用一般方式一样

而start()是建立进程等一系列产品工作中,随后自身启用run里边的每日任务內容。

认证编码:

 * @data 2019/11/8 - 中午10:29
 * 叙述:run()和start()
public class StartAndRunMethod {
 public static void main(String[] args) {
 Runnable runnable = new Runnable() {
 @Override
 public void run() {
 System.out.println(Thread.currentThread().getName());
 runnable.run();
 new Thread(runnable).start();
}

結果:

main

Thread-0

2、start()源代码讲解

起动新进程查验进程情况

public synchronized void start() {
 * This method is not invoked for the main method thread or "system"
 * group threads created/set up by the VM. Any new functionality added
 * to this method in the future may have to also be added to the VM.
 * A zero status value corresponds to state "NEW".
 if (threadStatus != 0)
 throw new IllegalThreadStateException();

有关threadStatus源代码:

 * Java thread status for tools, default indicates thread 'not yet started'
 private volatile int threadStatus;

根据编码能看到便是threadStatus便是纪录Thread的情况,原始进程默认设置为0.

添加进程组

 /* Notify the group that this thread is about to be started
 * so that it can be added to the group's list of threads
 * and the group's unstarted count can be decremented. */
 group.add(this);

启用start0()

boolean started = false;
 try {
 start0();
 started = true;
 } finally {
 try {
 if (!started) {
 group.threadStartFailed(this);
 } catch (Throwable ignore) {
 /* do nothing. If start0 threw a Throwable then
 it will be passed up the call stack */
 }

start0()方式应用c++撰写的方式,这种编码在gdk编码中,因此这儿已不这儿研究了。

3、start()方式不可以应用数次

根据不久源代码剖析,就了解start方式一开始就查验进程情况,当进程建立后或完毕了,该情况也不同于原始化情况便会抛出去IllegalThreadStateException出现异常。

检测编码:

start不能令其用数次

 * @data 2019/11/8 - 中午11:57
 * 叙述:start不能令其用数次
public class CantStartTwice {
 public static void main(String[] args) {
 Thread thread = new Thread();
 thread.start();
 thread.start();
}

4、留意点:

start方式是被synchronized装饰的方式,能够确保进程安全性。

由jvm建立的main方式进程和system组进程,其实不会根据start来起动。

之上便是文中的所有內容,期待对大伙儿的学习培训有一定的协助,也期待大伙儿多多的适用诺心互联网。

(责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
无法在这个位置找到: ajaxfeedback.htm
栏目列表
推荐内容


扫描二维码分享到微信