首页 > 其他分享 >Thread 之 start() 方法

Thread 之 start() 方法

时间:2023-01-05 21:24:19浏览次数:37  
标签:Thread void t1 start 方法 start0

案例代码

@Slf4j
public class Client {
    public static void main(String[] args) {
        Thread t1 = new Thread("t1") {
            @Override
            public void run() {
                log.info("t1 start...");
            }
        };
        t1.start();
    }
}

t1.start() 到底做了哪些事情,我们可以看一下 Thread 类的 start() 方法

public synchronized void start() {
	if (threadStatus != 0)
		throw new IllegalThreadStateException();
	group.add(this);
	boolean started = false;
	try {
		start0();
		started = true;
	} finally {
		try {
			if (!started) {
				group.threadStartFailed(this);
			}
		} catch (Throwable ignore) {
		
		}
	}
}

从上面的源码中可以看出在 start() 方法中又调用了 start0() 方法

private native void start0();

而 start0() 方法是 native 修饰的,其调用的是 C/C++ 的库函数,底层的逻辑也是由 C/C++ 实现的

其底层实际上的逻辑大致是,如果在 Java 中线程对象调用 start() 方法之后操作系统的任务调度器会让其进行调度,线程进入就绪状态,等待操作系统分配 CPU 时间片,如果分配到了 CPU 时间片之后,那么将会执行线程对象中的 run() 方法

注意:start() 方法只能调用一次,如果多次调用 start() 方法,会抛出 java.lang.IllegalThreadStateException 异常

 

 

 

标签:Thread,void,t1,start,方法,start0
From: https://www.cnblogs.com/xiaomaomao/p/17028881.html

相关文章

  • Linux时间戳转换成易读格式的方法
    背景最近一直在学习Redis相关的知识.其中遇到了一个redismonitor的命令但是这里有一个问题是:原生命令查询出来的时间是Unix时间戳格式的.不太好发现查看与进行对照......
  • Address支付方法send,transfer,call
    Send:具有返回值,2300gwei限制用法:boolname1=address.send(msg.value)//msg.value为转入值 Transfer:无返回值,2300gwei限制用法:address.transfer(msg.value) Call:......
  • adb获取app包名的方法
    一、手机或模拟器上已安装app(美团为例)方法一:在命令行输入adbshellammonitor,按Enter,再启动想要获取的app(包名在最后一行:com.sankuai.meituan)C:\Users\starteos>adbshe......
  • google外链怎么做?谷歌网站做外链的方法
    做谷歌SEO优化,外链是决定谷歌排名的重要因素关键是Google外链怎么做?英文外链建设的技巧如下外链对于谷歌排名算法来说是非常重要的,持续有效地增加高质量的GPB外链,可以有效提......
  • 方法
    方法System.out.println()System:类out:对象println():方法设计原则原子性,利于后期扩展main方法栈的最低层JVM调用return返回值类型一致;放在......
  • 常用的Linux服务器各项性能指标查看方法
    转:https://www.linuxprobe.com/linux-server-skill.html硬盘查看命令df硬盘查看命令df最常用参数是-h,以容易阅读的方式显示磁盘分区使用情况。df-hdf-h/root/#以易......
  • php发送get、post请求的几种方法
    ​方法1:用file_get_contents以get方式获取内容 <?php$url='http://www.domain.com/';$html=file_get_contents($url);echo$html;?>  方法2:用fopen......
  • python 动态导入文件的方法
    简介在实际项目中,我们可能需要在执行代码的过程中动态导入包并执行包中的相应内容,通常情况下,我们可能会将所需导入的包及对象以字符串的形式传入,例如test.test.run,下面将......
  • Adobe AIR for Android 缓存本地数据常用方法
    Local SharedObject这种方法比较简单方便的保存少的数据到到设备中。你不用自己去管理这些数据,设备会自动管理他。SharedObject 在 flash.net 包中,继承自EventDispatche......
  • VUE项目解决后台传过来的时间有个T的方法
    对接java接口,列表需要显示时间,发现java返回的时间为以下json格式(createdTime字段),日期和时间之间有个字母T,和产品沟通结果为无法接受此种显示形式。产品一张嘴,开发跑断......