当前位置: 首页 > news >正文

揭阳高端模板建站做企业网站电话销售话术

揭阳高端模板建站,做企业网站电话销售话术,seo2短视频发布,wordpress模板目录Java多线程-Thread类的run方法 一、背景二、研究Thread类的start()源码1、源码(比较短,贴一下)1.1 重点:start0(); 三、研究Thread类的run()源码1、源码(很关键,必须贴) 四、创建线程的2种方式1…

Java多线程-Thread类的run方法

  • 一、背景
  • 二、研究Thread类的start()源码
    • 1、源码(比较短,贴一下)
      • 1.1 重点:start0();
  • 三、研究Thread类的run()源码
    • 1、源码(很关键,必须贴)
  • 四、创建线程的2种方式
    • 1、继承Thread,并覆写run方法
    • 2、传入一个实现了run方法的Runnable接口的实现类
  • 五、到底执行哪个run方法?

一、背景

  • 在Java中,要使用多线程,很显然先要创建线程。
  • Java将线程抽象为Thread类。创建线程的第一步:new Thread()
  • 创建好Thread对象后,接下来,就是要启动线程,并执行线程需要做的事情:Thread对象.start();
    (1)首先会启动线程;
    (2)然后调用run方法();

二、研究Thread类的start()源码

1、源码(比较短,贴一下)

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) {}}
}

1.1 重点:start0();

  • 源码
private native void start0();
  • 是一个本地方法。也很好理解,Java的线程是交由操作系统来管理的。

start0()方法是Java中的一个本地方法,也就是说它是用其他语言(通常是C或C++)实现的。
其主要逻辑是创建一个新的系统级线程,并在新线程上执行run()方法
Java中的线程是基于操作系统的原生线程实现的,而start0()方法主要就是与操作系统进行交互,创建和启动新的系统级线程。
具体来说,start0()方法的执行逻辑一般包括以下步骤:
(1)申请系统资源创建一个新的系统级线程。
(2)将Java线程对象与新创建的系统级线程进行关联。
(3)设置线程的优先级和栈大小等线程属性。
(3)在新的系统级线程上调用Java线程对象的run()方法。
(4)如果run()方法执行结束或发生异常,清理系统级线程资源。
以上执行逻辑可能因不同的JVM实现和不同的操作系统有所不同,具体实现代码可以在JVM的源代码中找到。

三、研究Thread类的run()源码

1、源码(很关键,必须贴)

@Override
public void run() {if (target != null) {target.run();}
}
  • Thread类:public class Thread implements Runnable

Runnable的源码:

@FunctionalInterface
public interface Runnable {public abstract void run();
}

既然Thread类实现了Runnable接口,就要覆写run方法。

  • target是什么?
public class Thread implements Runnable {......private Runnable target;......
}
  • 用户可以通过这个构造方法传入target:
public Thread(Runnable target) {init(null, target, "Thread-" + nextThreadNum(), 0);
}

四、创建线程的2种方式

通过上面的分析,要让线程执行某段逻辑的关键是,实现run方法。
有2种方式:
(1)继承Thread,并覆写run方法
(2)传入一个实现了run方法的Runnable接口的实现类

1、继承Thread,并覆写run方法

  • 示例
public class PrintEvenThread extends Thread {@Overridepublic void run() {// 遍历100以内的偶数for (int i = 0; i < 100; i++) {if (i % 2 == 0) {System.out.println(Thread.currentThread().getName() + ":" + i);}}}
}public class PrintOddThread extends Thread {@Overridepublic void run() {// 遍历100以内的奇数for (int i = 0; i < 100; i++) {if (i % 2 != 0) {System.out.println(Thread.currentThread().getName() + ":" + i);}}}
}
public class PrintThreadTest {@Testpublic void testTwoPrintThread() {PrintEvenThread printEvenThread = new PrintEvenThread();PrintOddThread printOddThread = new PrintOddThread();printEvenThread.start();printOddThread.start();}
}
  • 还可以:匿名类的匿名对象的方式
new Thread() {@Overridepublic void run() {for (int i = 0; i < 100; i++) {if (i % 2 != 0) {System.out.println(Thread.currentThread().getName() + ":" + i);}}}
}.start();

2、传入一个实现了run方法的Runnable接口的实现类

  • 示例 (匿名类的匿名对象)
public class LearnCreateThreadMain3 {public static void main(String[] args) {new Thread(new PrintEven()).start();}
}class PrintEven implements Runnable {@Overridepublic void run() {for (int i = 0; i < 10; i++) {if (i % 2 == 0) {System.out.println(i);}}}
}
  • 还可以:匿名类的匿名对象的方式
new Thread(new Runnable() {@Overridepublic void run() {for (int i = 0; i < 100; i++) {if (i % 2 != 0) {System.out.println(Thread.currentThread().getName() + ":" + i);}}}}).start();

五、到底执行哪个run方法?

  • 示例
public class LearnCreateThreadMain4 {public static void main(String[] args) {Hi hi = new Hi();new Thread(hi) {@Overridepublic void run() {System.out.println("hello~");}}.start();}
}class Hi implements Runnable {@Overridepublic void run() {System.out.println("Hi~");}
}
  • 看懂了“三、研究Thread类的run()源码”,很容易回答:执行的是Thread子类对象的run方法。也就是输出:hello~
  • 如果子类没有覆写Thread的run()方法,那么执行的代码是:
@Override
public void run() {if (target != null) {target.run();}
}
  • 一旦子类覆写了,那执行的就是子类的run()方法了。
http://www.yayakq.cn/news/292550/

相关文章:

  • 石家庄商城网站制作一键卸载wordpress
  • 手机便宜的网站建设免费制作ai动画软件
  • 广西建设工程质量安全监督总站网站定制微信免费下载
  • 公司网站建设内容怎么才算完成一个网站
  • 做p2p网站的公司建设部网站为什么打不开
  • 品牌网站建设解决方中信建设有限责任公司资质等级
  • 网站宣传怎么做新手如何做代理商
  • 不是万维网的网站电商平台技术开发方案
  • 圣诞节网站模板wordpress html模板
  • 如何找百度做网站wordpress模板应用
  • 上海网页制作与网站设临沂做外贸网站的公司
  • 如何利用视频网站做数字营销推广网站建设 软件有哪些
  • 可以做ppt的网站有哪些方面wordpress手机拍照插件
  • 莱芜正规的网站建设贵州网站建设lonwone
  • 深圳建专业网站免费企业网站注册
  • 什么是企业网建站优化是什么
  • 庆阳市建设工程网上投标网站东莞封了几个镇
  • 刘涛做的婴儿玩具网站ps网站轮播图怎么做
  • 做兼职写小说网站甘肃金恒大建设有限公司网站
  • 手机模板网站资阳市网站建设
  • 做服装零售上什么网站网站建设用哪种语言好
  • 摄影设计网站postgre wordpress
  • 网站建设服务合同缴纳印花税吗定制网站和模板网站及仿站的区别
  • 做网站总结体会规模以上工业企业的标准
  • 贵阳手机网站开发阿里云域名注册优惠口令
  • 会员类网站模板飞沐网站建设公司
  • 什么是网站原创文章打开百度网站
  • 全球顶尖设计网站百度广告联盟app
  • 网站搭建多少钱徐州百都网络非常好中国建设銀行网站投诉电话
  • 网站开发的评论界面怎么写本地营销型网站建设