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

丹东市住房和城乡建设委员会网站百度贴吧官网首页

丹东市住房和城乡建设委员会网站,百度贴吧官网首页,哪些网站做问卷可以赚钱,大连旅顺一日游最佳路线一、过时方法 一些不推荐使用的方法已经过时,容易破坏同步代码块,使对象的锁得不到释放,进而造成线程死锁 二、守护线程 默认情况下,Java 进程需要等待所有线程都运行结束,才会结束。有一种特殊的线程叫做守护线程…

一、过时方法

一些不推荐使用的方法已经过时,容易破坏同步代码块,使对象的锁得不到释放,进而造成线程死锁
在这里插入图片描述

二、守护线程

默认情况下,Java 进程需要等待所有线程都运行结束,才会结束。有一种特殊的线程叫做守护线程,只要其它非守护线程运行结束了,即使守护线程的代码没有执行完,也会强制结束。

正常情况下:主线程运行结束,但t1线程仍未结束,因此进程并不会结束(只要有一个线程还在运行,Java进程并不会结束
在这里插入图片描述

将t1设置为守护线程后

import lombok.extern.slf4j.Slf4j;@Slf4j(topic = "c.Test15")
public class Test15 {public static void main(String[] args) throws InterruptedException {Thread t1 = new Thread(() -> {while (true) {if (Thread.currentThread().isInterrupted()) {break;}}log.debug("结束");}, "t1");// 将t1设置为守护线程(默认值为非守护线程:false)t1.setDaemon(true);   t1.start();Thread.sleep(1000);log.debug("结束");}
}

运行结果:主线程(非守护)运行结束后,无论守护线程(t1)是否执行完毕均会强制结束
在这里插入图片描述

守护线程应用
● 垃圾回收器线程就是一种守护线程【再堆内存中分配的对象,当没有其它对象引用这些对象时,这些未被引用的对象就会定期被垃圾回收
● Tomcat 中的 Acceptor 和 Poller 线程都是守护线程,所以 Tomcat 接收到 shutdown 命令后,不会等待它们处理完当前请求

三、线程状态(五种)

五种状态,这是从 操作系统 层面来描述的
在这里插入图片描述
初始状态】仅是在语言层面创建了线程对象,还未与操作系统线程关联(egJava中newThread对象,但未调用其start()方法

● 【可运行状态】(就绪状态)指该线程已经被创建(与操作系统线程关联),可以由 CPU 调度执行,但暂时还未获得CPU的时间片

● 【运行状态】指获取了 CPU 时间片运行中的状态
—— 当 CPU 时间片用完,会从【运行状态】转换至【可运行状态】,其切换会导致线程的上下文切换

● 【阻塞状态
—— 如果调用了阻塞 API,如 BIO 读写文件,这时该线程实际不会用到 CPU(调度器不会考虑调度阻塞状态的线程),会导致线程上下文切换,进入【阻塞状态】
—— 等 BIO 操作完毕,会由操作系统唤醒阻塞的线程,转换至【可运行状态】
—— 与【可运行状态】的区别是,对【阻塞状态】的线程来说只要它们一直不唤醒,调度器就一直不会考虑调度它们

● 【终止状态】表示线程已经执行完毕,生命周期已经结束,不会再转换为其它状态

四、线程状态(六种)

六种状态,是从Java API层面来描述的

根据Thread.State枚举,分为六种状态
在这里插入图片描述
NEW 线程刚被创建,但是还没有调用 start() 方法

RUNNABLE 当调用了 start() 方法之后,注意,Java API 层面的 RUNNABLE 状态涵盖了 操作系统 层面的【可运行状态】、【运行状态】和【阻塞状态】(由于 BIO 导致的线程阻塞,在 Java 里无法区分,仍然认为是可运行)操作系统层面的阻塞状态在Java中还是RUNNABLE

BLOCKED WAITINGTIMED_WAITING 都是 Java API 层面对【阻塞状态】的细分,后面会在状态转换一节详述

TERMINATED 当线程代码运行结束

3.1 六种状态演示

import lombok.extern.slf4j.Slf4j;import java.io.IOException;@Slf4j(topic = "c.TestState")
public class TestState {public static void main(String[] args) throws IOException {// ① 并未调用线程1的start()方法===>NEWThread t1 = new Thread("t1") {@Overridepublic void run() {log.debug("running...");}};// ② 不断运行===>RUNNABLE(既有可能分到时间片也有可能为分到时间片,也有可能陷入操作系统的IO阻塞)Thread t2 = new Thread("t2") {@Overridepublic void run() {while(true) { // runnable}}};t2.start();// ③ 打印后执行完毕===>TERMINATEDThread t3 = new Thread("t3") {@Overridepublic void run() {log.debug("running...");}};t3.start();// ④ 线程处于阻塞状态【sleep时间足够长===>TIMED_WAITING(有时限的的等待)】Thread t4 = new Thread("t4") {@Overridepublic void run() {synchronized (TestState.class) {try {Thread.sleep(1000000); // timed_waiting} catch (InterruptedException e) {e.printStackTrace();}}}};t4.start();// ⑤ 等待t2(死循环)一直运行结束===>WAITING(没有时限的等待)Thread t5 = new Thread("t5") {@Overridepublic void run() {try {t2.join(); // waiting} catch (InterruptedException e) {e.printStackTrace();}}};t5.start();// ⑥ t4线程会先对对象加锁,t6线程不能获取对象的锁===>t6陷入BLOCKEDThread t6 = new Thread("t6") {@Overridepublic void run() {synchronized (TestState.class) { // blockedtry {Thread.sleep(1000000);} catch (InterruptedException e) {e.printStackTrace();}}}};t6.start();try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}log.debug("t1 state {}", t1.getState());log.debug("t2 state {}", t2.getState());log.debug("t3 state {}", t3.getState());log.debug("t4 state {}", t4.getState());log.debug("t5 state {}", t5.getState());log.debug("t6 state {}", t6.getState());System.in.read();}
}

运行结果:
在这里插入图片描述

四、多线程应用统筹分析

如何使用多线程得到最优方案?
在这里插入图片描述
后两种办法均耗费时间较长
在这里插入图片描述
上图可以一眼看出,办法甲总共要16分钟(而办法乙、丙需要20分钟)。因此合理分配便可节约大量时间,我们可以使用多线程的思想便可找到最优的方案
在这里插入图片描述
方案实现:

import lombok.extern.slf4j.Slf4j;import static cn.itcast.n2.util.Sleeper.sleep;@Slf4j(topic = "c.Test16")
public class Test16 {public static void main(String[] args) {Thread t1 = new Thread(() -> {log.debug("洗水壶");sleep(1);log.debug("烧开水");sleep(5);},"老王");Thread t2 = new Thread(() -> {log.debug("洗茶壶");sleep(1);log.debug("洗茶杯");sleep(2);log.debug("拿茶叶");sleep(1);try {t1.join();} catch (InterruptedException e) {e.printStackTrace();}log.debug("泡茶");},"小王");t1.start();t2.start();}
}

运行结果:
在这里插入图片描述

http://www.mmbaike.com/news/54850.html

相关文章:

  • 黑河企业网站建设公司深圳全网信息流推广公司
  • 长沙专业网站建设运营佛山优化网站关键词
  • 留住用户网站短视频推广app
  • 海口个人建站模板北京网站建设公司哪家好
  • wordpress私有网盘站长工具seo综合查询源码
  • 关于网站建设维护的创业计划书要怎么网络做推广
  • 苏州专业高端网站建设天津百度
  • 个人网站备案建设方案书优化系统
  • 最好永久免费素材网廊坊网站排名优化公司哪家好
  • 南京自助网站建设口碑营销的形式
  • 山西大同专业网站建设制作价格南京seo外包
  • 企业营销网站建设公司哪家好什么是搜索引擎销售
  • 宝塔搭建完wordpressseo内链优化
  • php动态网站开发是干嘛的快速整站排名seo教程
  • 你有网站 我做房东 只收佣金的网上海百度搜索优化
  • 广元网站建设价格网红推广团队去哪里找
  • 长春网站建设有什么百度指数指的是什么
  • 信誉好的东莞网站建设数字营销包括哪六种方式
  • 开发一款游戏app需要多少钱宁波seo推荐优化
  • 网站了建设注册公司
  • 淘宝客网站建设软服业营收破334亿
  • 公司注册资金最低多少单页关键词优化费用
  • 湖南 网站建设太原高级seo主管
  • 怎么进入网站开发模式电子技术培训机构
  • Php做网站创业网络运营工作内容
  • magento网站维护市场调研报告模板
  • 如何做电影网站推广新闻软文自助发布平台
  • 网站做302重定向网络营销案例分析报告
  • asp. net 做网站seo怎么刷关键词排名
  • 昆明网站建设报价广州知名网络推广公司