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

网站制作上哪学校淘宝客免费建网站

网站制作上哪学校,淘宝客免费建网站,企业软文营销发布平台,网站建设与维护经营范围T04BF #x1f44b;专栏: 算法|JAVA|MySQL|C语言 #x1faf5; 小比特 大梦想 此篇文章与大家分享多线程的第一部分:引入线程以及创建多线程的几种方式 此文章是建立在前一篇文章进程的基础上的 如果有不足的或者错误的请您指出! 1.认识线程 我们知道现代的cpu大多都是多核心… T04BF 专栏: 算法|JAVA|MySQL|C语言 小比特 大梦想 此篇文章与大家分享多线程的第一部分:引入线程以及创建多线程的几种方式 此文章是建立在前一篇文章进程的基础上的 如果有不足的或者错误的请您指出! 1.认识线程 我们知道现代的cpu大多都是多核心的cpu,此时通过特定的编程技巧,即可以将不同的进程调度到多个cpu上执行,也就是我们在进程章节里面讲到的并发.在我们的日常开发中,往往一个服务器要同时面对多个客户端,为多个客户端提供服务,此时如果只利用一个cpu处理客户端的请求,那么响应速度就会变慢.那么此时多核心的cpu就能起到一定的效果,每一个客户端连上服务器的时候,服务器都创建一个进程给客户端提供服务,客户端断开了,服务器就把进程销毁 但是随之而来的又是一个问题,服务器频繁的创建,销毁进程实际上也会对服务器的响应速度造成影响 我们引入多线程的初心就是为了解决上述进程太重的问题,线程实际上也称为轻量级进程,顾名思义,他的创建和销毁开销都比进程要小 线程可以当成是进程的一部分,一个线程中可能含有一个线程,也可能含有多个线程 我们在进程章节谈到的进程,就是只针对一个进程里面只有一个线程而言的 我们在前面说过,描述一个进程是使用pcb这样的结构体,但是实际上准确来说应该是:一个pcb描述的是一个线程,多个pcb共同描述一个进程 那么我们对pcb中有些属性就该有新的认识 (1)pid :实际上一个线程对应的是一个pid,因此不同线程的pid是不一样的 (2)内存指针和文件描述操作符:在若干个线程中,这两个属性实际上是一样的 (3)状态、上下文、优先级、记账信息对应的是每个线程自己的属性 (4)tgid:在一个进程内是一样的,不同进程就不一样 此时,在同一个进程内,若干个线程之间的资源(内存资源和文件资源)是共享的,但是每个线程又是独立地在cpu上调度执行 因此就有一个重要的结论:进程是系统进行资源分配的基本单位,线程是系统调度执行的基本单位 (在进程章节谈到的进程调度,实际上就是线程调度) 为什么说线程比进程更轻量级??为什么说线程的创建和销毁比进程开销更小?? 本质上就是因为创建进程的时候就要涉及到资源的分配,销毁进程的时候涉及到资源的销毁,而创建线程,由于同一个线程之间的资源是共享的,相当于资源已经有了,就省去了分配资源 / 销毁资源的步骤,只是在创建第一个线程(也就是创建进程的时候)需要这个步骤,因此线程自然就轻量 但是多线程就没有缺点嘛?? 首先,一个进程内的线程不能无限地引入,引入的线程一旦多了,单位时间内要进行调度的次数也就增多了,此时对加大线程调度的开销,当这种开销太大的时候,实际上性能可能不升反降 其次,当多个线程同时访问和操作某写共享资源时,如多个线程并发地读取、修改、写入共享数据时如果没有适当的同步措施,就可能会引发数据竞争等一系列的问题,就会让程序出现bug,这就是我们后面要谈到的线程安全问题 再者,如果一个线程出现问题,就可能会影响到其他线程,如某个线程如果抛出异常,但是没有很好地处理异常,就会使整个进程退退出 2.第一个多线程代码 2.1通过继承Thread来创建一个线程类 class MyThread extends Thread{Overridepublic void run(){while(true){System.out.println(hello world);}} } public class Demo1 {public static void main(String[] args) {Thread t new MyThread();thread.start();while(true){System.out.println(main);}} } (1)在MyThread中的run方法,就是用来描述这个线程具体要干什么活 (2)在上述代码中,实际上存在着两个线程,一个是我们main线程(也称主线程),一个是t线程,此时main线程和t线程就在并发式的执行了 我们可以通过java提供的工具:jconsole来清楚地看到不同的进程 至于剩下的线程,就是Jvm帮我们做的一些其他的工作,例如垃圾回收等 (5)可以利用sleep让线程进入阻塞状态 实际上就是让当前线程主动放弃去cpu上执行,时间到了线程才会解除阻塞状态,重新有机会被调度到cpu上执行 class MyThread extends Thread{Overridepublic void run(){while(true){System.out.println(hello world);try {Thread.sleep(1000);//谁调用,谁就sleep} catch (InterruptedException e) {throw new RuntimeException(e);}}} } public class Demo1 {public static void main(String[] args) throws InterruptedException {Thread thread new MyThread();thread.start();while(true){System.out.println(main);Thread.sleep(1000);}} }此时运行后可以明显发现打印速度变慢了 (6)在上面代码中,某一时刻先打印main还是Thread是不确定的,这是因为多个线程之间的调度顺序是无序的,在操作系统内部也称为抢占式执行.即任何一个线程在执行到任何一段代码的时候,都会被其他线程抢占了他的cpu资源,就会给别的线程执行,就会充满随机性.也正是因为这样的随机性,导致我们很多程序的执行结果是不可预估的,甚至可能带来bug (7)关于start 我们前面说到到run方法,只是描述了一个线程具体应该干什么,而start方法才是操作系统提供的创建线程的api,此时调用start方法,在内核中才会真正创建一个pcb,真正为这个线程分配资源,进一步系统调度到这个线程的时候,才会执行到run方法 而如果我们直接执行run方法,那么就只是简单的执行run方法里面的代码逻辑,并没有创建一个线程 像这样创建一个方法(run),不去手动调用,而是交给系统 / 其他的库 / 其他的框架调用,就是回调函数 3.2通过实现runnable接口创建线程 class MyRunnable implements Runnable {Overridepublic void run(){while(true){System.out.println(hello thread);try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}} } public class Demo2 {public static void main(String[] args) throws InterruptedException {Thread t new Thread(new MyRunnable());t.start();System.out.println(hello main);} } Runnable的作用就只是描述了一个任务,这个任务与具体的执行机制无关,也就是我们是通过线程的方式执行还是通过其他的方式执行无所谓,这样的话就能把任务本身和线程概念分割开来了,这样的任务就可以交给其他地方来执行 对比刚刚的第一种方法,区别就是,刚刚第一种方法是线程自己记录我要干啥,而这种写法就是别人记录我要干啥,线程只是负责执行 这种方法方便代码的解耦合 3.3匿名内部类来实现 本质上就是上面两种,只不过换了一种方法来实现 public class Demo3 {public static void main(String[] args) {Thread thread new Thread(){Overridepublic void run() {....}};} }public class Demo1 {public static void main(String[] args) throws InterruptedException {Thread t new Thread(new Runnable() {Overridepublic void run() {while(true){System.out.println(hello Thread);try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}}});t.start();while(true){System.out.println(hello main);Thread.sleep(1000);}} }3.5使用lambda表达式 public static void main(String[] args) throws InterruptedException {Thread t new Thread(()-{while(true){System.out.println(hello t);try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}});t.start();while(true){System.out.println(hello main);Thread.sleep(1000);} }我们会发现,用这种写法貌似没有重写run方法?? 实际上lambda方法就是对run方法的实现,通过lambda这种方式,我们可以直接在Thread对象的构造函数中执行线程的任务逻辑,无需显示地重写run方法 感谢您的访问!!期待您的关注!!! T04BF 小比特 大梦想
文章转载自:
http://www.morning.tslfz.cn.gov.cn.tslfz.cn
http://www.morning.kngx.cn.gov.cn.kngx.cn
http://www.morning.gllgf.cn.gov.cn.gllgf.cn
http://www.morning.ftync.cn.gov.cn.ftync.cn
http://www.morning.msfqt.cn.gov.cn.msfqt.cn
http://www.morning.rnht.cn.gov.cn.rnht.cn
http://www.morning.sqmlw.cn.gov.cn.sqmlw.cn
http://www.morning.hnhkz.cn.gov.cn.hnhkz.cn
http://www.morning.nyhtf.cn.gov.cn.nyhtf.cn
http://www.morning.tgtrk.cn.gov.cn.tgtrk.cn
http://www.morning.dhyzr.cn.gov.cn.dhyzr.cn
http://www.morning.duqianw.com.gov.cn.duqianw.com
http://www.morning.nxwk.cn.gov.cn.nxwk.cn
http://www.morning.jrqbr.cn.gov.cn.jrqbr.cn
http://www.morning.khyqt.cn.gov.cn.khyqt.cn
http://www.morning.ltdrz.cn.gov.cn.ltdrz.cn
http://www.morning.qsswb.cn.gov.cn.qsswb.cn
http://www.morning.jkcnq.cn.gov.cn.jkcnq.cn
http://www.morning.skbhl.cn.gov.cn.skbhl.cn
http://www.morning.rlpmy.cn.gov.cn.rlpmy.cn
http://www.morning.tgxrm.cn.gov.cn.tgxrm.cn
http://www.morning.rjynd.cn.gov.cn.rjynd.cn
http://www.morning.mynbc.cn.gov.cn.mynbc.cn
http://www.morning.tntqr.cn.gov.cn.tntqr.cn
http://www.morning.mdmqg.cn.gov.cn.mdmqg.cn
http://www.morning.bklhx.cn.gov.cn.bklhx.cn
http://www.morning.ycwym.cn.gov.cn.ycwym.cn
http://www.morning.bttph.cn.gov.cn.bttph.cn
http://www.morning.gsdbg.cn.gov.cn.gsdbg.cn
http://www.morning.gnyhc.cn.gov.cn.gnyhc.cn
http://www.morning.ybgyz.cn.gov.cn.ybgyz.cn
http://www.morning.gynls.cn.gov.cn.gynls.cn
http://www.morning.mhrzd.cn.gov.cn.mhrzd.cn
http://www.morning.qfgwx.cn.gov.cn.qfgwx.cn
http://www.morning.dyzbt.cn.gov.cn.dyzbt.cn
http://www.morning.bpmfz.cn.gov.cn.bpmfz.cn
http://www.morning.hrdx.cn.gov.cn.hrdx.cn
http://www.morning.dshkp.cn.gov.cn.dshkp.cn
http://www.morning.ksqyj.cn.gov.cn.ksqyj.cn
http://www.morning.jyjqh.cn.gov.cn.jyjqh.cn
http://www.morning.fysdt.cn.gov.cn.fysdt.cn
http://www.morning.zxwqt.cn.gov.cn.zxwqt.cn
http://www.morning.thrgp.cn.gov.cn.thrgp.cn
http://www.morning.kfclh.cn.gov.cn.kfclh.cn
http://www.morning.qqrqb.cn.gov.cn.qqrqb.cn
http://www.morning.hjlsll.com.gov.cn.hjlsll.com
http://www.morning.nfcxq.cn.gov.cn.nfcxq.cn
http://www.morning.fxwkl.cn.gov.cn.fxwkl.cn
http://www.morning.sfhjx.cn.gov.cn.sfhjx.cn
http://www.morning.gbqgr.cn.gov.cn.gbqgr.cn
http://www.morning.spwm.cn.gov.cn.spwm.cn
http://www.morning.kqrql.cn.gov.cn.kqrql.cn
http://www.morning.haibuli.com.gov.cn.haibuli.com
http://www.morning.dzgmj.cn.gov.cn.dzgmj.cn
http://www.morning.qcrhb.cn.gov.cn.qcrhb.cn
http://www.morning.bmjfp.cn.gov.cn.bmjfp.cn
http://www.morning.qmpbs.cn.gov.cn.qmpbs.cn
http://www.morning.nlhcb.cn.gov.cn.nlhcb.cn
http://www.morning.bxrlt.cn.gov.cn.bxrlt.cn
http://www.morning.dshxj.cn.gov.cn.dshxj.cn
http://www.morning.lmxzw.cn.gov.cn.lmxzw.cn
http://www.morning.touziyou.cn.gov.cn.touziyou.cn
http://www.morning.qnzpg.cn.gov.cn.qnzpg.cn
http://www.morning.mmplj.cn.gov.cn.mmplj.cn
http://www.morning.rqnzh.cn.gov.cn.rqnzh.cn
http://www.morning.duckgpt.cn.gov.cn.duckgpt.cn
http://www.morning.mslsn.cn.gov.cn.mslsn.cn
http://www.morning.smjyk.cn.gov.cn.smjyk.cn
http://www.morning.mfrb.cn.gov.cn.mfrb.cn
http://www.morning.vvbsxm.cn.gov.cn.vvbsxm.cn
http://www.morning.nicetj.com.gov.cn.nicetj.com
http://www.morning.yxplz.cn.gov.cn.yxplz.cn
http://www.morning.cljpz.cn.gov.cn.cljpz.cn
http://www.morning.xrwtk.cn.gov.cn.xrwtk.cn
http://www.morning.fhsgw.cn.gov.cn.fhsgw.cn
http://www.morning.qpqb.cn.gov.cn.qpqb.cn
http://www.morning.pangucheng.cn.gov.cn.pangucheng.cn
http://www.morning.smwlr.cn.gov.cn.smwlr.cn
http://www.morning.cjmmn.cn.gov.cn.cjmmn.cn
http://www.morning.bztzm.cn.gov.cn.bztzm.cn
http://www.tj-hxxt.cn/news/274606.html

相关文章:

  • 化工网站开发个体营业执照网上申请
  • dw网站制作温州市住房和城乡建设局
  • 做什么网站最赚钱五金制品东莞网站建设
  • 甘肃住房建设厅网站龙游住房和城乡建设局网站
  • 怀化政法网站青岛市建设网站
  • 西亚网站建设科技同城信息平台推广
  • 计算机基础网站建设和网络安全利鑫做彩票网站
  • 站酷网如何接单润滑油东莞网站建设技术支持
  • 郑州外贸营销网站建设方管结构图集久久建筑网
  • 网站空间800m又名林州站长网
  • 专业网站建设培训机构佛山网站建设找千界
  • 江苏 网站集约化建设方案做网站需要学会些什么
  • 给网站做伪静态群晖docker wordpress设置
  • 网站备案依据建筑企业资质公司
  • 优化网站标题名词解释百度网盟推广费用投入
  • 酒类营销网站河南做网站推广
  • 官方网站建设维护合作协议永久免费网站空间
  • 建设部网站危房鉴定标准规定外部网站可以做链接到淘宝吗
  • asp网站模板如何修改网站背景色代码
  • 购物网站建设流程怀远建设局门户网站
  • 一个新的网站怎么做SEO优化行业开发
  • 网站建设的需求文档灵动网站建设
  • google和百度等相关网站的广告词昆明网站设计制造
  • 北京市城市建设档案馆网站首页网站开发名片怎么做
  • 模板网站开发wordpress模板 付费
  • 买高端品牌网站建设深圳罗湖企业网站建设
  • 西安市城乡与住房建设厅网站拓者设计吧 现代风格
  • 深圳市建设注册中心网站十大免费行情软件
  • 成都比较好的网站设计公司dedecms 网站地图 插件
  • 男女直接做的视频视频网站优享wordpress