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

网站备案 做网站免费手游推广平台

网站备案 做网站,免费手游推广平台,做网站怎么字体全部变粗了,组建网站上次我们了解了多线程的五种创建方法,今天来学习Thread的基本用法。 目录 run和start Thread常见的构造方法 Thread的几个常见属性 后台线程 是否存活 线程终止 1.使用标志位 2.使用Thread自带的标志 等待线程 run和start 首先需要理解Thread的run和star…

上次我们了解了多线程的五种创建方法,今天来学习Thread的基本用法。

目录

run和start

Thread常见的构造方法

Thread的几个常见属性

后台线程

是否存活

线程终止

1.使用标志位

2.使用Thread自带的标志

等待线程


run和start

首先需要理解Thread的run和start的区别:

run描述了线程要做的工作,start让内核创建一个PCB,也就是让操作系统新建一个线程。

如果不调用start,那么就不会在内核中有新的线程。

Thread常见的构造方法

第二、三、四个方法,其实都只是给线程起了个名字,线程默认的名字,叫做thread-0之类的,我们新建一个线程来看一下。

public class demo6 {public static void main(String[] args) {Thread t = new Thread(new Runnable() {@Overridepublic void run() {while(true){System.out.println("hello");}}},"mythread_demo");t.start();}
}

 通过jconsole可以看到我们自己命名的线程出现了。

Thread的几个常见属性

 

1.ID 是线程的唯一标识,不同线程不会重复

2.名称是各种调试工具用到,这里是构造方法里取的名字

3.线程状态 

4.优先级高的线程理论上来说更容易被调度到

5.关于后台线程,需要记住一点:JVM会在一个进程的所有非后台线程结束后,才会结束运行。

6.是否存活,即简单的理解,为run方法是否运行结束了

7.线程的中断问题,我们待会再说。

后台线程

后台进程,又叫做守护线程。

前台线程,会阻止进程结束.前台线程的工作没做完,进程是完不了的。
后台线程,不会阻止进程结束.后台线程工作没做完,进程也是可以结束的。

JVM必须在所有前台进程结束后,才会结束运行。

代码里手动创建的线程,默认都是前台的.包括main 默认也是前台的.
其他的jvm自带的线程都是后台的.
也可以手动的使用setDaemon设置成后台线程.是后台线程,就是守护线程。

t.setDaemon(true);

可以用这个代码把t设置成后台进程,这样进程的结束就和t无关。

是否存活

isAlive是在判断,当前系统里面的这个线程是不是真的有了。

在真正调用start之前,调用t.isAlive就是false。调用start之后, isAlive就是true。

线程终止

终止的意思是,不是让线程立即就停止,而是通知线程,你应该要停止了。是否真的停止取决于线程这里具体的代码写法。

1.使用标志位

在创建多线程的代码前面,加上一个flag变量,作为标志位,最后由flag控制进程是否停止。这样在最后停止时,就是由flag决定的。

但是如果在while(flag)中sleep休眠时,自变量这种方式不能及时响应

但是 sleep 在唤醒的时候,还会做一件事,把刚才设置的这个标志位再设置回 false(清空了标志位)

这就导致,当 sleep 的异常被 catch 完了之后, 循环还要继续执行!!!

那么就是说,此时的flag并没有起作用。

因此,这里只是告诉让这个线程结束.这个线程是否要结束,啥时候结束都是线程内部自己代码来决定的。

2.使用Thread自带的标志

while(!Thread.currentThread().isInterrupted()){



t.interrupte就是终止t线程,main 线程调用t.interrupt()相当于main通知 t 你要终止了。

其实跟前面的flag差不过,只是把一个boolean操作封装到Thread的方法里面了。


interrupt会做两件事:

1.把线程内部的标志位(boolean)给设置成true。

2.如果线程在进行sleep,就会触发异常,把sleep唤醒。

但是sleep在唤醒的时候,还会做一件事,把刚才设置的这个标志位再设置回false.(清空了标志位)

这就导致,当sleep的异常被catch完了之后,循环还要继续执行。

那岂不是加不加这个interru都没用?反正遇到线程sleep的时候总是会继续运行?

此时我们可以在循环最后加一个break

 这样子线程t就会立刻响应你的终止请求。

等待线程

线程是一个随机调度的过程,等待线程,做的事情,就是在控制两个线程的结束顺序。

通过join来实现

 

 

 

 

 

 

http://www.hkea.cn/news/246226/

相关文章:

  • c# 网站开发教程周口网站seo
  • 湘西网站建设帮人推广注册app的平台
  • 切图做网站web制作网站的模板
  • 网站的做网站公司哪家好网络优化大师app
  • 国内外包网站今日头条(官方版本)
  • 外网建筑设计网站线上渠道推广有哪些方式
  • 厦门做网站公司排名电工培训机构
  • 武汉网站设计制作外包公司的人好跳槽吗
  • 网站建设哪里最好页面关键词优化
  • 清远建设网站制作seo系统培训课程
  • 网站的网页建设知识ppt北大青鸟职业技术学院简介
  • 巫山网站设计aso优化榜单
  • 关于节约化建设网站的表态发言网站制作报价表
  • 建行网站是多少呢故事式的软文广告例子
  • 阳江市住房和城乡规划建设局网站一级消防工程师考试
  • 做课件的网站有哪些用html制作淘宝网页
  • 网站开发前后台整个流程品牌宣传的推广
  • 深圳市门户网站建设网站推广优化方法
  • 中山公司注册网页怎么优化
  • 网站建设怎么分录2022年新闻摘抄简短
  • 江西景德镇建设厅网站太原关键词排名推广
  • 番禺做网站自媒体发布平台有哪些
  • 用dede做的网站首页电子商务网络营销
  • 最好的做任务赚钱网站网络域名怎么查
  • 建设部规范网站百度app关键词优化
  • 骏域网站百度怎么收录网站
  • 网站robots.txt查看九江seo公司
  • 建设阿里妈妈网站搜索引擎排名优化seo
  • 自学网站建设作业创建网站免费
  • 营销网站定制的优势成品网站源码的优化技巧