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

胶南网站建设价格seozou是什么意思

胶南网站建设价格,seozou是什么意思,WordPress适合做多大级别的网站,如何做后台网站增删改文章目录前言1.start()方法和run()方法2.不能两次调用start()方法3.线程的执行是随机的start()方法和run()方法的执行顺序不一定相同4.run()方法由JVM调用public Thread(Runnable target)中的target前言 本篇文章主要讲解以下几个问题: start()方法和run()方法的区别与联系为…

文章目录

  • 前言
  • 1.start()方法和run()方法
  • 2.不能两次调用start()方法
  • 3.线程的执行是随机的
    • start()方法和run()方法的执行顺序不一定相同
  • 4.run()方法由JVM调用
    • public Thread(Runnable target)中的target

前言

本篇文章主要讲解以下几个问题:

  • start()方法和run()方法的区别与联系
  • 为什么不能连续两次调用shart()方法
  • run()方法中可能忽略的问题

1.start()方法和run()方法

我们在创建线程时,会重写run()方法.run()方法可以理解为线程要做的任务,但是直接调用run()方法,只是main线程也就是主线程去执行的,是没有新线程产生的
如果要想让线程去执行run()方法里面的代码,就需要让创建线程的对象去调用start()方法,shart()方法可以创建并启动线程,JVM调用run()方法后(后面会有介绍) 线程才会去执行

2.不能两次调用start()方法

同一个线程对象,只能调用一次start()方法,不能两次调用start()方法,调用两次的话,会抛出 IllegalThreadStateException 这个异常
示例如下:

public class Example6 {public static void main(String[] args) {Thread t1 = new Thread(()->{System.out.println("1");});t1.start();t1.start();}
}

在这里插入图片描述
为什么会这样?我们可以查看start()的源码
在这里插入图片描述
上面有一段话: A zero status value corresponds to state "NEW" 意思是 零状态值对应于状态“NEW”
线程运行时有六种状态,先熟悉一下,之后还会写文章进行详细介绍:

状态描述
新建(NEW)表示线程已经创建好了,但是还没有调用start()方法
就绪(RUNNABLE)表示线程可能在运行,也可能在就绪队列
阻塞 (BLOCKED)表示线程处于等在锁的状态
等待(WAITING)表示线程处于条件等待状态,当触发条件后会唤醒
计时等待(TIME_WAIT)比WAITING多了个超时条件触发的机制
终止(TERMINATED)表示线程执行结束

因此线程再调用start()方法之后,可能处于终止,或者其它非NEW状态,第二次调用的时候,相当于重新让线程运行一遍,从线程安全和线程本身的执行逻辑来看,都是不合理的,因此在调用start()方法之后,会对线程的状态进行一个判断,如果线程不是在NEW状态下,就会抛出异常

3.线程的执行是随机的

线程的执行是随机的,这也是个老生常谈的问腿了,究其原因还是因为线程的"抢占式执行",谁先"抢"到
操作系统分配的CPU资源,谁先去执行

start()方法和run()方法的执行顺序不一定相同

示例1:
看一下代码及代码运行结果

class MyThread extends Thread{private int val;public MyThread(int val) {this.val = val;}@Overridepublic void run() {System.out.println(val);}
}
public class Example1 {public static void main(String[] args) {MyThread myThread1 = new MyThread(1);MyThread myThread2 = new MyThread(2);MyThread myThread3 = new MyThread(3);MyThread myThread4 = new MyThread(4);MyThread myThread5 = new MyThread(5);myThread1.start();myThread2.start();myThread3.start();myThread4.start();myThread5.start();}
}

在这里插入图片描述

由此我们可以看到虽然是myThread1先调用的start()方法,但是输出的结果却是在第二位,而myThread3后执行却在第一位
在这里插入图片描述
再次运行一次代码的执行结果虽然与上次不同,但仍然是随机的,当然也不是没有运行结果是1 2 3 4 5的可能

示例2:
看一下代码及代码运行结果

public class Example4 {public static void main(String[] args) {Thread t1 = new Thread(()->{while (true){System.out.println("t1");}});Thread t2 = new Thread(()->{while (true){System.out.println("t2");}});t1.start();t2.start();}
}

在这里插入图片描述

这里我们也能看到,start()执行的顺序与run()方法执行的顺序无关,随机执行t1和t2的run()方法 虽然这里是while(true),但是线程之间是相互独立的,所以并不影响
因此可以得出结论:start()方法和run()方法的执行顺序不一定相同

4.run()方法由JVM调用

start()执行完后,创建的新线程不会立刻去执行run()方法, run()方法会先被JVM去调用,之后对应的线程才会去执行.

public Thread(Runnable target)中的target

之前再讲创建线程的5种方法,介绍了实现Runnable接口,创建线程的方法
在这里插入图片描述

但其实这里面有一个坑,那就是public Thread(Runnable target)中的target参数,来看一下run()方法的底层源码

在这里插入图片描述
如果这里面的target不为空,才会去执行target的run()方法.如果传一个null,就不会去执行,如图所示:
在这里插入图片描述
代码如下:

class MyRunnable implements Runnable{@Overridepublic void run() {System.out.println("1");}
}
public class Example7 {public static void main(String[] args) {MyRunnable myRunnable1 = new MyRunnable();MyRunnable myRunnable2 = null;Thread t1 = new Thread(myRunnable1);t1.start();Thread t2 = new Thread(myRunnable2);t2.start();}
}

因此要注意使用继承Runnable接口 创建线程的时候 要注意target不要为null

文章到这里去结束了,感谢观看!
“希望你继续兴致盎然的与世界交手,一直走在充满鲜花的道路”
在这里插入图片描述

http://www.tj-hxxt.cn/news/67210.html

相关文章:

  • css 设计网站请你设计一个网络营销方案
  • 杨凌做网站的市场营销策划方案3000字
  • 做二手货的网站免费的网站关键词查询工具
  • 网站建设推广专家百度关键词优化大
  • 手机网站开发合同优化大师官网下载安装
  • 支付宝手机网站支付二维码怎么做全网营销推广案例
  • 哪里有免费的网站推广软件啊应用商店app下载
  • 个体网站建设上海网站推广公司
  • 上海网站制作平台如何进行seo
  • 网站推广过程叙述接推广app任务的平台
  • 濮阳网站建设公司网站很卡如何优化
  • wdcp 网站打不开万能优化大师下载
  • 天津建筑设计院seo优化是什么
  • c 博客网站开发教程竞价托管公司联系方式
  • 如何自己做优惠卷网站宁波seo教程网
  • 动易与php环境架设网站成都新站软件快速排名
  • 公司网站下二级站点如何做流量大的推广平台有哪些
  • dede网站seoseo搜索优化是什么意思
  • 南戴河区网站建设哪家好产品软文代写
  • 私人让做彩票网站吗网络营销师报考条件
  • 网龙沧州网站制作shopify seo
  • 济南网站建设泉诺宁波网站推广公司有哪些
  • 四川省建设厅职称查询网站公司怎么做网络营销
  • 微信公众号做特效的网站宣传推广
  • 在国外社交网站做产品推广营销软文800字范文
  • wordpress 一键建站营销型网站建设需要多少钱
  • 免费微信网站建设网络营销的好处
  • 贵州省建设执业资格教育促进会网站河北百度推广seo
  • 网站建设框架百度一下你就知道原版
  • 怎么做狼视听网站seo是什么技术