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

湖南省住房与城乡建设厅网站衡水电子网站建设

湖南省住房与城乡建设厅网站,衡水电子网站建设,网站组网图,北京网页设计外包一、#x1f49b; Java的Thread类表示线程 1.创建类#xff0c;继承Thread重写run方法 2.创建类#xff0c;实现Runnable重写run方法 3.可以继承Thread重写run基于匿名内部类 4.实现Runnable重写run基于匿名内部类 5.lamdba表达式表示run方法的内容#xff08;推荐#x…一、  Java的Thread类表示线程 1.创建类继承Thread重写run方法 2.创建类实现Runnable重写run方法 3.可以继承Thread重写run基于匿名内部类 4.实现Runnable重写run基于匿名内部类 5.lamdba表达式表示run方法的内容推荐 6。基于Callable以后学 7.基于线程池以后学 匿名内部类不用看定义看下面用法领悟正常建类后面大括号这一步相当于先创建一个子类但是这个子类是没有名字匿名另一方面这类的创建是在Demo这个类里面。 下面这个写法是3号 我们要记住一个是最重要的是写run这个是赋予了线程需要做什么工作。 public class Demo {public static void main(String[] args) throws InterruptedException {Thread tnew Thread(){ //匿名内部类看上面详细解答Overridepublic void run() { //子类中重写了run方法实现了线程要干的工作while(true){System.out.println(hello world);try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}}}};t.start(); //创建了该类的实例并且是使用那个t这个引用指向。while (true) {System.out.println(love);Thread.sleep(1000);}}}写法4 为什么括号不是封死的因为小括号对应的是Thread构造方法的结束new Runnable整个一段都在构造出一个Thread的参数 创建这个匿名内部类通过构造方法传给Thread。 public class Demo {public static void main(String[] args) throws InterruptedException {Thread tnew Thread(new Runnable (){ //括号不是封死的Overridepublic void run() {while(true){System.out.println(hello world);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}} ) ; //看这个小括号t.start();while (true) {System.out.println(love);Thread.sleep(1000);}}}5.使用lambda推荐的方法) 表示run方法的内容 本质是匿名方法这样的匿名函数主要可以作为回调函数使用。——回调函数合适的时候就干不合适就选择不干。不需要程序猿们主动去调动需要知道函数名才能被调动常用场景 1.服务器开发 2.图形界面开发用户的某个操作触发回调而是在合适的时机自动的被调动 Java本身不允许函数脱离类但是lambda特例起名叫“函数式接口”必须只有一个方法 类似于Lammbda这样的写法本质上并没有新增新的语言特性而是把以往实现的功能换了一种更简单的方式编写。 public class Demo {public static void main(String[] args) throws InterruptedException {Thread tnew Thread(()-{ //也是没有右括号在下面。while(true){System.out.println(hello world);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}});t.start();while (true) {System.out.println(love);Thread.sleep(1000);}}}二、   Thread就是Java,线程的代言人系统中一个线程对应Java中一个Thread对象 public class Demo {public static void main(String[] args) throws InterruptedException {Thread tnew Thread(()-{while(true){System.out.println(hello world);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}},myThread); //给这个进程起名字t.start();while (true) {System.out.println(love);Thread.sleep(1000);}}}Thread常见ID。线程的身份标识JVM给设定了一个标识 一个线程可以存好几个身份标记 1.JVM有一个身份标记 2.pthread库系统给程序猿提供的操作线程的API也有一个线程的身份标识 3.内核里面针对线程的PCB还有身份标识 Thread常见属性 id.           getId()                             name.     getname() 状态。     getState()           java中线程的状态和操作系统的有一定差异。 优先级     getPriority          设置获取优先级的作用不是很大线程的调度主要还是系统内核负责系统的调度速度更快。 是否是后台进程   isDaemon()           后台进程/守护进程,后台进程不影响进程结束创建的线程默认是前端线程前台进程会影响到进程结束如果前台进程没执行完进程是不会结束的。 一个进程的所有前台线程都执行完退出了那么即使存在后端线程没有执行完毕也会随着进程一起退出 setDaemon(true)   把某一个进程设置为后端进程这样前端线程结束后面的也结束了 public class Demo {public static void main(String[] args) throws InterruptedException {int n 0;Thread tnew Thread(()-{int m 0;while(m9){System.out.println(hello world);m;try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}},myThread);t.setDaemon(true); //设置为后端线程t.start();while (n3) { // 打印完事走完全部就结束了,所以一定会有这三个System.out.println(love); n;Thread.sleep(1000); }}}是否存活 isAlive Thread对象对应的线程在系统内核中是否存活。 Thread对象并不是和系统中的线程完全一样同生共死的。 一般的Thread对象先创建好手动调用start 内核才真正创造出线程 消亡的时候 可能对象先结束了生命周期没有引用指向这个对象 也有可能Thread对象还在内核中的线程把run执行完成了就结束了。 对象的整个生命周期大致可以分为7个阶段 创建阶段、应用阶段、不可视阶段、不可到达阶段、可收集阶段、终结阶段、与释放阶段了解就好 重要方法start():真正创造出线程-调用系统API完成线程创建工作本身是一瞬间完成的相当于是传话的小弟“你造个线程出来”调用API之后代码立刻执行start之后的逻辑 操作系统内核配套的程序 一个系统最核心的功能 1.对下管理好各种硬件设备 2.对上给各种程序提供稳定的运行环境 操作系统的内核应用程序 创建线程非常核心的功能系统API系统调用 一般情况应用不可进入内核操作不可进入内核的程序成为“用户态” 如果一些应用程序能够进入后台直接操作内核里面的一些数据结构程序是出于“内核态”这样的程序还叫做驱动程序 三、   Thread的方法  一个线程的run方法执行完毕就算终止了。此时的终止此处线程就是要想办法让run尽快执行完毕正常不会出现run没执行完毕突然就没了的情况 sleep相当于是停一会不是说停止了 1.程序猿们手动设置标志位如 public static voolean isQuitfalse;(写成成员变量不会触发变量捕捉而是内部类来访问成员变量 看下面这个图代码在后面执行完isQuittrue; 线程就终止了同时main也走完了。 public class Demo {public static boolean isQuitfalse;public static void main(String[] args) throws InterruptedException {int n 0;Thread tnew Thread(()-{int m 0;while(!isQuit){System.out.println(hello world);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}},myThread);t.start();while (n3) {System.out.println(love);n;Thread.sleep(1000);}isQuittrue; //手动终止}}但是我们来看下面这个图为什么我这样放进方法里面不可以呢——这就源于我们lambda表达式的变量捕捉机制​​​​​​​ lambda可以捕获外界变量这样lambda表达式执行的时机是更靠后的这就导致后续真正执行lambda时候局部变量isQuit是否可能已经被销毁了呢 这种情况是客观存在的让lambda去访问一个已经被销毁的变量很明显是不合适的lambda引入了变量捕获这样的机制lambda去访问一个已经被销毁的变量但明显是不合适的lambda引入了变量捕获这样的机制lambda内部看起来是直接访问外部的变量其实本质是把外部变量给复制了一份到lambda里面这样就可以解决刚才的生命周期问题了但是捕获变量有限制的要求是be final如同final,就是一个变量我们后续没有修改他的操作  or effectively final(事实上的最终值 final修饰 2.直接用Thread 类给我们提供了现成标志位不用手动,  while(!Thread.currentThread().isInterrupted()) Thread.currentThread():的含义获取当前线程的对象Thread,提供静态方法,currentThread在哪个线程调动这个方法就能够获取到哪个线程的引用相当于就是t但是不可以写t写t是报错的 isInterrupted() 对象内部提供了一个标志位boolean类型的 true:结束 false:不结束 我们看上面的图能发现为啥还会有异常呢原因就是一个线程kennel正在运行也可能处于sleep状态如果线程sleep的过程中是否应该把他唤醒你 当然了肯定要把他唤醒但是sleep在唤醒的同时也会自动清除前面设置的标志位给程序猿们留下操作空间此时要是想让线程结束则catch之后加一个break; sleep唤醒之后程序猿们一般有以下几种操作方式 1.立即停下来立即结束线程 2.忽略终止请求继续循环不写break) 3.继续做点别的事情过一会再结束线程catch之后执行别的逻辑最后break;) public class Demo {public static void main(String[] args) throws InterruptedException {int n 0;Thread t new Thread(()-{int m 0;while(!Thread.currentThread().isInterrupted()){System.out.println(hello world);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();break;}}},myThread);t.start();while (n3) {System.out.println(love);n;Thread.sleep(1000);}t.interrupt();}}四、  等待线程——join 多个线程是并发执行的具体的执行过程都是由操作系统复制调度的操作系统的调度线程“随机的”当然是我们无法确定他的先后顺序 等待线程就是一种规划线程结束顺序的手段 AB两个线程希望B先结束A后结束此时就可以让A线程调用B.join方法去等待B 此时B线程还没结束完A线程就会进入阻塞状态相当于给B留下了空间B执行完毕之后A再从阻塞状态中恢复回来并且继续往后执行。如果A执行到B.join的时候B已经执行完那么A就不用阻塞了直接往下执行即可,如下图他是等待先把t这个线程走完了再去走下面的main. ​​​​​​​ 阻塞-该代码暂时不继续执行该进程暂时不去cpu参与调度sleep也能让该线程阻塞但是是有时间限制的 join是死等知道你完事不然他不会开始不推荐 产生一个新的join里面填写时间最大等待时间。只要我时间到了不管你来不来我都走了更推荐使用这种时间版本留有余地。 可以被interrupt唤醒的等待操作 1.join 2.sleep 3.wait 需要的自己拿着用呗 public class Demo {public static void main(String[] args) throws InterruptedException {int n 0;Thread t new Thread(()-{int m 0;while(m5){System.out.println(hello world);m;try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}},myThread);t.start();t.join(3000);while (n3) {System.out.println(love);n;Thread.sleep(1000);}}}
http://www.dnsts.com.cn/news/70702.html

相关文章:

  • 用jsp做的网站需要什么工具栏专业团队优质网站建设方案
  • 网站开发应该学哪门语言建网站哪家划算
  • 五指山住房建设局网站做食品团购去那家网站好
  • 织梦网站导航如何删除房地产网站开发
  • php购物网站开发开发多久公主岭网站建设规划
  • 黄埔做网站cms网站开发模式
  • 建设网站一般需要多少钱网站图片有什么要求吗
  • 昆山推广用什么网站比较好网站建设的栏目
  • 源码超市网站源码建设门户网站的可行性分析
  • 苍南哪里有网站建设公司网站文章被采集
  • 手机网站图片切换特效合肥seo网站推广
  • 提供网站建设的公司张家口网站建设制作
  • 网站建设 中企动力wordpress get_option 数组
  • 网站制作和推广lv官网手机php网站开发
  • 做网站前端的软件广东省自然资源厅领导分工
  • 做的很漂亮的网站杭州网站制
  • 网站开发一般要哪些开发工具徐州优化网站
  • 做网站准备内容深圳公司做网站
  • 个人网站可以做音乐下载网哲林高拍仪网站开发
  • 哈尔滨队网站网页美工建设网站分几个步骤
  • 建个人网站需要钱嘛中信建设有限责任公司财务情况
  • 网站备案流程解答百度网站开发业务
  • 网站平台建设策划简单网站制作成品
  • 个人网站建设的过程搜狗推广代理商查询
  • 企业建设网站的过程和预算表什么网站做生鲜比较好
  • 主题网站设计模板路由器可以做网站服务器吗
  • 网站添加 备案网站建设价表模板
  • 网站流量被黑注册公司每年需要缴纳什么费用
  • 在闲鱼可以做网站吗做网站的电脑软件
  • 深圳最简单的网站建设wordpress模板展示网站