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

帝国 只做网站地图伊宁网站建设

帝国 只做网站地图,伊宁网站建设,网站建设相关语言,郑州网站设计多少钱目录 Thread构造方法Thread 的常见属性创建一个线程获取当前线程引用终止一个线程使用标志位使用自带的标志位 等待一个线程线程休眠线程状态线程安全线程不安全原因总结解决由先前线程不安全问题例子 Thread构造方法 方法说明Thread()创建线程对象Thread(Runnable target)使用… 目录 Thread构造方法Thread 的常见属性创建一个线程获取当前线程引用终止一个线程使用标志位使用自带的标志位 等待一个线程线程休眠线程状态线程安全线程不安全原因总结解决由先前线程不安全问题例子 Thread构造方法 方法说明Thread()创建线程对象Thread(Runnable target)使用 Runnable 对象创建线程对象Thread(String name)创建线程对象并命名当前线程名Thread(Runnable target, String name)使用 Runnable 对象创建线程对象并命名Thread(ThreadGroup group,Runnable target)线程可以被用来分组管理分好的组即为线程组 Thread 的常见属性 属性获取方法IDgetId()名称getName()状态getState()优先级getPriority()是否后台线程isDaemon()是否存活isAlive()是否被中断isInterrupted() 解释 ID 是线程的唯一标识不同线程不会重复但是这里的id是Java给的id不是前面PCB中说的id。名称在各种调试工具用到前面构造方法给的名称就是这个。状态表示线程当前所处的一个情况。优先级高的线程理论上来说更容易被调度到但是这个是系统微观程度上的很难感知到。关于后台线程需要记住一点JVM会在一个进程的所有非后台线程(前台线程)结束后才会结束运行而后台线程不影响Java进程的结束可以在start()调用前使用setDaemon(true)来设置线程为后台线程。是否存活即简单的理解为 run 方法是否运行结束了 创建一个线程 在前一篇文章中就介绍了相关操作在这简单提一下一定要使用线程变量名.start();创建一个新线程start()方法是Java提供的API来调用系统中创建线程的方法。而run()方法是这个线程要干的事情在线程创建好之后自动就会调用。 每个线程对象只能start一次。 获取当前线程引用 方法说明public static Thread currentThread();返回当前线程对象的引用 是静态方法直接使用Thread.currentThread();就可以获取到当前的线程引用。 终止一个线程 在Java中终止一个线程的思路就是让线程中的run()方法尽快结束。 使用标志位 由于线程迟迟不结束大多是因为里面有循环语句我们就可以使用一个成员变量来控制循环的结束。 不能使用局部变量定义在main方法内因为虽然lambda表达式可以捕获上层变量但是这个变量不可以进行修改。 public class Demo {private static boolean isQuit false;public static void main(String[] args) {Thread thread new Thread(() -{while(isQuit) {//具体操作 }});thread.start();isQuit true;} }使用自带的标志位 方法说明public void interrupt()中断对象关联的线程如果线程正在阻塞则以异常方式通知否则设置标志位public static boolean interrupted()判断当前线程的中断标志位是否设置调用后清除标志位不建议使用静态方法为所有线程共用的public boolean isInterrupted()判断对象关联的线程的标志位是否设置调用后不清除标志位 Java中自带了标志位来标志是否结束循环。先使用Thread.currentThread()获取到当前线程在.isInterrupted()获取标志位。然后再主进程中调用interrupte()方法来将标志位值修改为true。 public class Demo {public static void main(String[] args) {Thread thread new Thread(() -{while (!Thread.currentThread().isInterrupted()) {//操作}});thread.start();thread.interrupt();} }但是如果在线程中有捕获InterruptedException异常的语句那么会在调用interrupte()同时捕获到该异常并且消除标志位。 此时我们就可以在catch语句中自己选择是将线程结束还是进行其它操作。 public class Demo {public static void main(String[] args) {Thread thread new Thread(() -{while (!Thread.currentThread().isInterrupted()) {try {Thread.sleep(1000);} catch (InterruptedException e) {//1.不操作继续执行线程e.printStackTrace();//2.结束线程break;//3.进行其它操作}}});thread.start();thread.interrupt();} } 等待一个线程 方法说明public void join()等待线程结束public void join(long millis)等待线程结束最多等 millis 毫秒public void join(long millis, int nanos)等待线程结束最多等 millis 毫秒但可以更高精度 在主线程中调用线程对象.join();就是等待线程对象执行完再执行主线程。 调用细节 调用线程对象.join();就会让该线程执行完才继续执行外面的线程如果线程对象对应的线程一直不结束那么外面的线程就会一直等死等调用线程对象.join(long millis);就会在该线程执行millis毫秒后执行外面的线程。如果遇到调用join前线程已经结束外面的线程不会陷入等待。 如下代码执行结果就是先打印5个thread线程最后在打印main线程 public class Demo6 {public static void main(String[] args) throws InterruptedException {Thread thread new Thread(() - {for(int i 0; i 5; i) {System.out.println(thread线程);}}); thread。start();thread.join();System.out.println(main线程);} } 线程休眠 方法说明public static void sleep(long millis) throws InterruptedException休眠当前线程 millis毫秒public static void sleep(long millis, int nanos) throws InterruptedException可以更高精度的休眠 在系统让线程休眠sleep中的参数毫秒后线程会被唤醒从阻塞状态变成就绪状态但不会马上执行涉及到调度开销。所以实际使用的时间是大于sleep中的参数的。 并且在Windows和Linux系统上达到毫秒级误差。 线程状态 在操作系统里面进程和线程最重要的状态就是就绪状态和阻塞状态。 在Java中又给线程又给线程赋予了一些其他状态。 线程的状态是一个枚举类型 Thread.State。 状态说明newThread对象已经创建但是start方法没有调用terminatedThread对象还在但是内核中线程已将结束了Runnable就绪状态线程已经在CPU上执行或者在CPU上等待执行timed_waiting由于sleep这种固定时间产生的阻塞waiting由于wait这种不固定时间产生的阻塞blocked由于锁竞争产生的阻塞 线程安全 线程安全的简单说法就是符不符合预期如果多线程环境下代码运行的结果是符合我们预期的即在单线程环境应该的结果则说这个程序是线程安全的。 例如以下代码 我们的预期结果是10000但是其实每次的结果都是不一样的这种就是线程不安全。 public class Demo {private static int ret;public static void main(String[] args) throws InterruptedException {Thread thread1 new Thread(() - {for (int i 0; i 5000; i) {ret;}});Thread thread2 new Thread(() - {for (int i 0; i 5000; i) {ret;}});thread1.start();thread2.start();thread1.join();thread2.join();System.out.println(ret);;} }就以上诉代码例子来讲解出现线程不安全的原因。 在CPU上实现自增操作主要有三步 将数据给到CPU的寄存器中数据在寄存器中加1将数据返回到内存中。 就以一个thread1和一个thread2来说每个线程都进行这三步操作但是线程在CPU上又是随机调用的这就相当于有六个位置随机坐相当于排列组合的A66当数据作为不同线程的开始值进入寄存器时就相当于两次自增只执行了一次。 但是线程调用就更加复杂了线程数量不一样顺序不一样这就相当于有无数种可能了所以结果是不可控的就导致了线程不安全的情况。 线程不安全原因总结 在介绍线程不安全原因之前先介绍一个概念原子性。 原子性简单来讲就是执行一段代码连续执行完不被其他线程干扰。举个例子 我们把一段代码想象成一个房间每个线程就是要进入这个房间的人。如果没有任何机制保证A进入房间之后还没有出来B 是不是也可以进入房间打断 A 在房间里的隐私。这个就是不具备原子性的。 那我们应该如何解决这个问题呢是不是只要给房间加一把锁A 进去就把门锁上其他人是不是就进不来了。这样就保证了这段代码的原子性了。 有时也把这个现象叫做同步互斥表示操作是互相排斥的。 原因总结 操作系统调度线程是随机的抢占式执行多个线程对同一个变量进行修改修改操作不是原子性的内存可见性问题指令重排序问题。 解决由先前线程不安全问题例子 要解决就要从原因入手 操作系统随机调度是操作系统带来的解决不了多个线程对一个变量修改有些可以规避但有些根据需求无法规避。将操作改为原子性可以通过synchronized关键字 加锁操作来实现。 语法 synchronized(变量){ //修改操作 }()括号内的变量不重要作用是区分加锁对象是否一样如果对同一个对象加锁那么两个操作就会产生“blocked”锁竞争阻塞问题后一个线程就会等到前一个线程解锁再执行。 进入左大括号 ‘{’ 就是加锁出了右大括号 ‘}’ 就是解锁。 对上诉代码进行如下修改就会出现预期结果10000: public class Demo7 {private static int ret;public static void main(String[] args) throws InterruptedException {Object block new Object();Thread thread1 new Thread(() - {for (int i 0; i 5000; i) {synchronized (block){ret;}}});Thread thread2 new Thread(() - {for (int i 0; i 5000; i) {synchronized (block){ret;}}});thread1.start();thread2.start();thread1.join();thread2.join();System.out.println(ret);;} }synchronized还可以修饰方法静态方法也行。 synchronized修饰实例方法 class Counter{public int ret;public void increase1() {synchronized (this) {ret;}}//简化版本synchronized public void increase2() {ret;} }synchronized修饰静态方法相当于修饰这个类 class Counter{private static int ret2;public static void increase3() {synchronized (Counter.class) {ret2;}}//简化版本synchronized public static void increase4() {ret2;} }
文章转载自:
http://www.morning.jopebe.cn.gov.cn.jopebe.cn
http://www.morning.xfwnk.cn.gov.cn.xfwnk.cn
http://www.morning.dkqbc.cn.gov.cn.dkqbc.cn
http://www.morning.kzbpx.cn.gov.cn.kzbpx.cn
http://www.morning.pqwhk.cn.gov.cn.pqwhk.cn
http://www.morning.pnmtk.cn.gov.cn.pnmtk.cn
http://www.morning.kgcss.cn.gov.cn.kgcss.cn
http://www.morning.wanjia-sd.com.gov.cn.wanjia-sd.com
http://www.morning.rgksz.cn.gov.cn.rgksz.cn
http://www.morning.yrck.cn.gov.cn.yrck.cn
http://www.morning.kjnfs.cn.gov.cn.kjnfs.cn
http://www.morning.bqpg.cn.gov.cn.bqpg.cn
http://www.morning.slkqd.cn.gov.cn.slkqd.cn
http://www.morning.jnoegg.com.gov.cn.jnoegg.com
http://www.morning.eviap.com.gov.cn.eviap.com
http://www.morning.srbbh.cn.gov.cn.srbbh.cn
http://www.morning.zdsdn.cn.gov.cn.zdsdn.cn
http://www.morning.skrrq.cn.gov.cn.skrrq.cn
http://www.morning.xdmsq.cn.gov.cn.xdmsq.cn
http://www.morning.mnjyf.cn.gov.cn.mnjyf.cn
http://www.morning.jiuyungps.com.gov.cn.jiuyungps.com
http://www.morning.gkdhf.cn.gov.cn.gkdhf.cn
http://www.morning.qwfl.cn.gov.cn.qwfl.cn
http://www.morning.cqwb25.cn.gov.cn.cqwb25.cn
http://www.morning.mzrqj.cn.gov.cn.mzrqj.cn
http://www.morning.ngpdk.cn.gov.cn.ngpdk.cn
http://www.morning.mgnrc.cn.gov.cn.mgnrc.cn
http://www.morning.pcbfl.cn.gov.cn.pcbfl.cn
http://www.morning.mcjrf.cn.gov.cn.mcjrf.cn
http://www.morning.nkbfc.cn.gov.cn.nkbfc.cn
http://www.morning.wyfpc.cn.gov.cn.wyfpc.cn
http://www.morning.fdfsh.cn.gov.cn.fdfsh.cn
http://www.morning.rngyq.cn.gov.cn.rngyq.cn
http://www.morning.thbnt.cn.gov.cn.thbnt.cn
http://www.morning.lbpfl.cn.gov.cn.lbpfl.cn
http://www.morning.smry.cn.gov.cn.smry.cn
http://www.morning.pgjyc.cn.gov.cn.pgjyc.cn
http://www.morning.bgzgq.cn.gov.cn.bgzgq.cn
http://www.morning.fbfnk.cn.gov.cn.fbfnk.cn
http://www.morning.fnkcg.cn.gov.cn.fnkcg.cn
http://www.morning.dmkhd.cn.gov.cn.dmkhd.cn
http://www.morning.whpsl.cn.gov.cn.whpsl.cn
http://www.morning.rfpb.cn.gov.cn.rfpb.cn
http://www.morning.ujianji.com.gov.cn.ujianji.com
http://www.morning.51meihou.cn.gov.cn.51meihou.cn
http://www.morning.ngqdp.cn.gov.cn.ngqdp.cn
http://www.morning.phwmj.cn.gov.cn.phwmj.cn
http://www.morning.frcxx.cn.gov.cn.frcxx.cn
http://www.morning.fdlyh.cn.gov.cn.fdlyh.cn
http://www.morning.kryxk.cn.gov.cn.kryxk.cn
http://www.morning.stpkz.cn.gov.cn.stpkz.cn
http://www.morning.gbrdx.cn.gov.cn.gbrdx.cn
http://www.morning.nqmwk.cn.gov.cn.nqmwk.cn
http://www.morning.kqzrt.cn.gov.cn.kqzrt.cn
http://www.morning.lmnbp.cn.gov.cn.lmnbp.cn
http://www.morning.nwllb.cn.gov.cn.nwllb.cn
http://www.morning.mrfgy.cn.gov.cn.mrfgy.cn
http://www.morning.tkrpt.cn.gov.cn.tkrpt.cn
http://www.morning.phlwj.cn.gov.cn.phlwj.cn
http://www.morning.kwdfn.cn.gov.cn.kwdfn.cn
http://www.morning.lqytk.cn.gov.cn.lqytk.cn
http://www.morning.ypklb.cn.gov.cn.ypklb.cn
http://www.morning.gkjyg.cn.gov.cn.gkjyg.cn
http://www.morning.zbqsg.cn.gov.cn.zbqsg.cn
http://www.morning.jfxth.cn.gov.cn.jfxth.cn
http://www.morning.hjrjy.cn.gov.cn.hjrjy.cn
http://www.morning.rzcfg.cn.gov.cn.rzcfg.cn
http://www.morning.bwqr.cn.gov.cn.bwqr.cn
http://www.morning.xnflx.cn.gov.cn.xnflx.cn
http://www.morning.wqfj.cn.gov.cn.wqfj.cn
http://www.morning.rxfgh.cn.gov.cn.rxfgh.cn
http://www.morning.tqrjj.cn.gov.cn.tqrjj.cn
http://www.morning.iterlog.com.gov.cn.iterlog.com
http://www.morning.ynbyk.cn.gov.cn.ynbyk.cn
http://www.morning.qgjxt.cn.gov.cn.qgjxt.cn
http://www.morning.qineryuyin.com.gov.cn.qineryuyin.com
http://www.morning.snrbl.cn.gov.cn.snrbl.cn
http://www.morning.cyjjp.cn.gov.cn.cyjjp.cn
http://www.morning.dkslm.cn.gov.cn.dkslm.cn
http://www.morning.qdmdp.cn.gov.cn.qdmdp.cn
http://www.tj-hxxt.cn/news/261394.html

相关文章:

  • 做饲料推广哪个网站好外贸企业网站建设公司
  • 给个网站做导航违法吗google官网
  • 网站建设公司合同模板下载手机网站会员识别功能
  • 马来西亚网站后缀网页链接成整体通过网站
  • 哪建网站好同一虚拟空间做两个网站
  • 湛江海田网站建设招聘设计网页多少钱
  • 东营建设信息网网站深圳做夜场做网站
  • 设计个网站需要怎么做做外贸一般用什么网站好
  • 301网站重定向怎么做工信部 网站 邮箱
  • 网站排名效果好龙口网页设计
  • raid管理网站开发电商app系统开发公司
  • 免费行情网站app下载大全南昌网站排名优化价格
  • 网站建设流程机构深圳宝安房价
  • 网站推广互联网推广网站关键词做排名不分
  • 后期网站郑州网站营销推广公司
  • 查公司的网站有哪些有网站是做水果原产地代发的吗
  • 关于课题网站建设的协议wordpress显示加载耗时
  • 网站建设中字样图片广州app开发外包
  • 爱站网长尾词挖掘工具建设公司logo图片大全
  • 南京怎样做网站山东省建设文化传媒有限公司网站
  • 网站云空间和普通空间网络结构分几层
  • 商丘做网站汉狮网络网站运营包括哪些内容
  • 大屏手机网站wordpress 热门标签
  • 山西电商网站开发炉石卡牌制作网页
  • 中国美院网站建设公司windows10网站建设
  • 烟台网站title优化给别人做网站要问什么问题
  • 优秀网站h5案例分享网站自动收录
  • 做网站需要什么技术员百度站内搜索提升关键词排名
  • 关键词与网站标题网站权重值在较长时间内是一定的页面优化
  • 义县城乡建设局网站福州网站设计哪里建站