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

荥阳市城乡建设规划网站百度网页翻译功能在哪

荥阳市城乡建设规划网站,百度网页翻译功能在哪,宿州网站制作建设,wordpress clickjack目录 前言 一.线程状态图 二.线程状态 1.初始状态(NEW) 2.运行状态(RUNNING) 3.等待状态#xff08;WAITING) 4.超时等待#xff08;TIMED_WAITING) 5.阻塞状态#xff08;BLOCKED) 6.终止状态(TERMINATED) 三.线程状态间的转换 四.总结 前言 线程状态及其状态转换…目录 前言 一.线程状态图 二.线程状态 1.初始状态(NEW) 2.运行状态(RUNNING) 3.等待状态WAITING) 4.超时等待TIMED_WAITING) 5.阻塞状态BLOCKED) 6.终止状态(TERMINATED) 三.线程状态间的转换 四.总结  前言 线程状态及其状态转换是线程生命周期中的关键部分下面我们就来讲解六种线程状态以及其如何转换。 一.线程状态图 线程状态其实是一种枚举类型Thread.State class T_state{public static void main(String[] args) {for(Thread.State state:Thread.State.values()){System.out.println(state);}} } NEW初始创建了一个线程但还没有通过start方法调用。可以理解为安排了工作但还没有开始工作。RUNNABLE运行又分为Ready就绪状态和Running运行中状态。 当线程对象被创建之后若有线程比如main线程调用了该线程对象的start那么该线程就会进入可运行线程池进行等待线程调用获取CPU的使用权此时就处于Ready就绪状态当获取到cpu使用权之后就转变为Running运行中状态。 Ready可以理解为即将开始工作而Running即正在工作中。 BLOCKED阻塞线程试图获取一个锁对象但此时锁对象被其他线程所占有那么线程就进入阻塞等待当获取到锁则进入Running状态。WAITING等待线程处于等待状态等待其他线程唤醒可以通过notify或者notifyAll方法来唤醒。TIMED_WAITING超时等待可以在指定的时间内返回。可以使用带参数的sleep或者wait。TERMINATED终止线程执行结束。主线程和子线程互不影响子线程并不会因为主线程结束就结束。 二.线程状态 1.初始状态(NEW) 用new关键字新建一个线程对象这个线程就处于new状态。 public static void main(String[] args) {// 创建一个线程该线程在执行时会暂停1000毫秒Thread tnew Thread(()-{try {Thread.sleep(1000); // 模拟线程执行的延迟} catch (InterruptedException e) {e.printStackTrace(); // 处理线程被中断的异常}});System.out.println(t的线程状态t.getState()); // 输出线程的当前状态}t的线程状态NEW2.运行状态(RUNNING) 分为RUNNING运行状态和Ready就绪状态. public static void main(String[] args) {Thread tnew Thread(()-{try {Thread.sleep(1000);}catch (InterruptedException e){e.printStackTrace();}});t.start();System.out.println(t的线程状态t.getState()); // 输出线程的当前状态} t的线程状态RUNNABLE 3.等待状态WAITING) 等待状态下没有时间限制等被notify或者notifyAll唤醒。 public static void main(String[] args) throws InterruptedException {// 获取当前线程对象用于后续检查线程状态Thread mainTThread.currentThread();// 使用lambda表达式创建一个新的线程该线程用于展示线程的运行和状态检查Thread tnew Thread(()-{try {// 使新线程睡眠1秒模拟耗时操作Thread.sleep(1000);}catch (InterruptedException e){// 如果线程在睡眠时被中断打印异常信息e.printStackTrace();}// 输出线程的当前状态System.out.println(main线程状态mainT.getState());});// 启动新线程使其开始执行t.start();// 主线程等待新线程完成t.join();} main线程状态WAITING4.超时等待TIMED_WAITING) TIMED_WAITING线程在等待唤醒但设置了时限当到达时限会自动唤醒线程。 public static void main(String[] args) throws InterruptedException {// 创建一个线程该线程执行一个lambda表达式使线程睡眠1秒Thread t new Thread(() - {try {Thread.sleep(1000); // 线程睡眠1000毫秒} catch (InterruptedException e) {e.printStackTrace(); // 捕获InterruptedException异常并打印堆栈跟踪}});t.start();//让main线程休眠Thread.sleep(50);System.out.println(t.getState());} TIMED_WAITING 5.阻塞状态BLOCKED) 当进入到synchronized关键字修饰的方法或者代码块时线程处于阻塞状态。 示例两个线程争同一个锁对象此时会引起锁竞争没有获取到锁的线程会进入阻塞状态等待拿到锁的线程将锁释放。 public static void main(String[] args) {final Object onew Object();Thread tnew Thread(()-{synchronized (o) {while (true) {try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}}});Thread ttnew Thread(()-{synchronized (o) {while (true) {try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}}});t.start();tt.start();System.out.println(t的线程状态t.getState()); // 输出线程的当前状态System.out.println(tt的线程状态tt.getState()); // 输出线程的当前状态} t的线程状态RUNNABLE tt的线程状态BLOCKED6.终止状态(TERMINATED) 当线程执行结束就处于终止状态。 需要注意主线程和子线程互不影响子线程并不会因为主线程结束就结束 /*** 程序入口* param args 命令行参数* throws InterruptedException 如果线程被中断*/public static void main(String[] args) throws InterruptedException {// 创建一个线程该线程将休眠1秒Thread t new Thread(() - {try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}});// 启动线程t.start();// 等待线程结束t.join();// 输出线程的状态System.out.println(t.getState());} TERMINATED三.线程状态间的转换 1.创建一个线程处于new让其转换为running状态。可以看到线程t的状态为 NEW-RUNNING-TERMINATED public static void main(String[] args) throws InterruptedException {Thread tnew Thread(()-{try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}});System.out.println(t线程的状态t.getState());t.start();System.out.println(t线程的状态t.getState());t.join();System.out.println(t线程的状态t.getState());} t线程的状态NEW t线程的状态RUNNABLE t线程的状态TERMINATED2.将处于running的线程转换为wait 。调用wait或者join都可 这里以join为例。 public static void main(String[] args) throws InterruptedException {Thread main Thread.currentThread();Thread t new Thread(() - {try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println(main线程状态main.getState());});t.start();System.out.println(main线程状态main.getState());t.join();} main线程状态RUNNABLE main线程状态WAITINGwait方法一般在synchronized修饰的代码块或者方法中使用。 调用wait会发生两件事 1线程解锁“锁对象” 2被解锁的线程会进入waiting状态。  在使用wait方法时需要先对线程加锁否则会报错。因为wait会先解锁再进入等待状态。 示例: public static void main(String[] args) throws InterruptedException {final Object locker new Object();Thread t1new Thread(()-{synchronized (locker){try {locker.wait();} catch (InterruptedException e) {throw new RuntimeException(e);}}},t1);t1.start();System.out.println(t线程的状态t1.getState());Thread.sleep(50);System.out.println(t线程的状态t1.getState());} t线程的状态RUNNABLE t线程的状态WAITING但如果我们使用wait带参数的方法那么状态还会是WAITING吗 public static void main(String[] args) throws InterruptedException {final Object locker new Object();Thread t1new Thread(()-{synchronized (locker){try {locker.wait(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}},t1);t1.start();System.out.println(t线程的状态t1.getState());Thread.sleep(50);System.out.println(t线程的状态t1.getState());} t线程的状态RUNNABLE t线程的状态TIMED_WAITING可以看到当我们使用带参数的wait方法时此时t的状态转变为TIMED_WAITING。 3.若多个线程尝试获取同一个锁那么就会引起对锁的竞争即锁竞争”。没用获取到线程的锁将会进入阻塞状态BLOCKED)等线程获取到锁才能执行。 示例 /*** 主函数演示线程间的状态变化* param args 命令行参数* throws InterruptedException 当线程被中断时抛出此异常*/public static void main(String[] args) throws InterruptedException {// 创建一个对象作为锁final Object locker new Object();// 创建线程t1使用锁对象进行同步操作Thread t1new Thread(()-{// 使用锁进行同步控制形成死循环synchronized (locker){while(true){;}}},t1);// 启动线程t1t1.start();// 输出线程t1的当前状态System.out.println(t1线程的状态t1.getState());// 创建线程t2也使用锁对象进行同步操作Thread t2new Thread(()-{// 使用锁进行同步控制但没有进行循环所以很快释放锁synchronized (locker){;}},t2);// 启动线程t2t2.start();// 输出线程t2的当前状态System.out.println(t2线程的状态t2.getState());// 主线程等待50毫秒以观察线程t2的状态变化Thread.sleep(50);// 再次输出线程t2的当前状态以观察其变化System.out.println(t2线程的状态t2.getState());}t1线程的状态RUNNABLE t2线程的状态RUNNABLE t2线程的状态BLOCKED我们可以打开jconsole进行查看。 四.总结  当我们创建一个线程对象时此时线程就处于NEW状态。 调用start方法会让线程进行运行状态其中又分为RUNNING运行中状态和Ready就绪状态。 若想要让RUNNABLE中的线程进入WAITING(等待状态可以使用wait或者join方法。想唤醒WAITING中的线程需要使用notify或者nofityAll方法来唤醒。 可以使用带参数的join、sleep和wait方法让RUNNABLE中的线程进入限时等待TIMED_WAITING当达到时时限会自动唤醒线程。 RUNNABLE中的线程若想出发BLOCKED状态需要触发锁竞争。 当线程中线程体的内容都执行完之后就会进入TERMINATED(终止状态 线程状态的讲解就先到这里了~ 若有不足欢迎指正~
http://www.dnsts.com.cn/news/61084.html

相关文章:

  • 网站建设总结经验宣城有做网站的公司吗
  • harry louis做受网站营销网站建设设计
  • 做阿里网站卖东西赚钱吗建设网站用凡科怎么样
  • 速度超快的wordpress模板一个网站多个域名的seo优化
  • 高端网站建设知识汽修厂营销活动方案
  • 免费的视频网站推广软件网站建设与运营公司主营业务收入与成本
  • 无锡专业制作网站便民平台推广怎么做
  • 网站类型的销售个人网站报价
  • 建立网站需要注册公司吗wordpress 英文改中文
  • 演示动画制作免费网站正规的抖音推广平台
  • 网站开发学习网站怎么添加关键词 好让百度收入_ 现在网站用的是模板做的
  • cms企业网站上海市建设咨询协会网站
  • 昆明网站制作方案定制做网站要注意些什么要求
  • 星乐seo网站关键词排名优化长沙建网站的公司一对一定制方案
  • 24小时学会网站建设 pdf上饶市建设局官方网站
  • 自己建设一个网站步骤微信第三方开发平台
  • 简易网站模板企业网站建立
  • 做网站赚钱有哪些途径互联网优化营销
  • 免费建各种网站网站免费下载安装大全手机版
  • 哪个企业的网站做的比较好网站建设公司运营
  • 易语言可以做网站么a032网站模版
  • 合肥高端网站开发公司手游网络游戏排行榜
  • 工信部网站备案登陆网页设计 做网站的代码
  • 做酒类网站网站建设 域名 数据库
  • 专业网站优化外包威海人社app下载官网2022
  • 最佳线上网站制作模板首页关键词排名代发
  • 网站视频打不开什么原因宽带
  • 做多站发布信息的网站老版51个人空间找照片
  • 重庆高端网站设计标书制作培训机构
  • 成都高端网页开发公司天津网站的优化