当前位置: 首页 > news >正文 网站seo快速优化兰州网络公司网站 news 2025/10/31 17:56:00 网站seo快速优化,兰州网络公司网站,营销方法有哪几种,wordpress和数据库名目录 1. start() (1) start() 的性质 (2) start() 和 Thread类 的关系 2. 终止一个线程 (1)通过共享的标记结束线程 1. 通过共享的标记结束线程 2. 关于 lamda 表达式的“变量捕获” (2) 调用interrupt()方法 1. isInterrupted() 2. currentThread() … 目录 1. start() (1) start() 的性质 (2) start() 和 Thread类 的关系 2. 终止一个线程 (1)通过共享的标记结束线程 1. 通过共享的标记结束线程 2. 关于 lamda 表达式的“变量捕获” (2) 调用interrupt()方法 1. isInterrupted() 2. currentThread() 3. interrupt() 3. join() 4. sleep() 5. Java中线程生命周期的定义 (1) 线程状态 (2) 线程状态转移 (3) 操作系统中线程的生命周期 1. start() (1) start() 的性质 之前我们已经讲过了如何通过覆写 run() 方法创建一个线程对象但线程对象被创建出来并不意味着线程就开始运行了。 覆写 run() 方法是提供给线程要做的事情的指令清单线程对象可以认为是把李四、王五叫过来了而调用 start()方法就是喊一声:”行动起来!“线程才真正独立去执行了。 start() 是Java 标准库/JVM 提供的方法本质上是调用操作系统的API 在 idea 中查看 start() 的原码发现关键部分被关键字 native 修饰被native这个关键字修饰的方法称为本地方法。 补充 run() 是线程的入口方法通过 JVM 自行调用不需要手动调用start() 是调用操作系统的 API. (2) start() 和 Thread类 的关系 在 Java中Thread 对象和操作系统中的线程 — — 对应每个 Thread对象都只能调用一次 start() 来创建线程如果想创建多线程就必须创建新的Thread 对象 答 他们属于是两个不同的输出流没办法保证输出的顺序。 2. 终止一个线程 如何终止一个线程 通过共享的标记来进行沟通调用interrupt()方法来通知 (1)通过共享的标记结束线程 1. 通过共享的标记结束线程 想要终止一个线程就是让线程中的入口方法return 进而使得线程终止。 来看如下代码 该代码的逻辑为 让 t 线程执行死循环的打印现在我们要修改一下这个代码中的循环终止条件以结束 t 线程. 为了避免编译器优化而出现 bug 需要用 volatile 关键字修饰 标志位 成员变量 (这个关键字的功能后面介绍)。 程序运行结果 打印次数并不重要重要的是随着 isfinish 被更改t线程也因此结束。 所以让线程结束的关键就是让线程中的入口方法 run() 能够被返回。 2. 关于 lamda 表达式的“变量捕获” 在上面的代码中还有一个小细节我们在while的循环判断条件中引入了一个变量 引入的变量是以成员变量的方式定义这个变量的。 如果把这个变量定义成局部变量把 isfinish 放入 main 方法中是否可以实现刚刚的逻辑呢 我们查看报错原因 如果对于局部变量 isFinish 不做任何后续修改那么这个变量是允许被 lamda 捕获的 补充 lamda 表达式“变量捕获”的语法如果针对的对象类型是引用类型只要这个引用指向的对象不改变哪怕这个对象的值被修改这个引用类型的变量也是允许被 lamda 捕获的。 因为引用类型的局部变量和引用类型指向的对象本体 的生命周期是不同的 所以 lamda 的“变量捕获”语法的核心问题还是成员变量和局部变量的生命周期问题 对于上图 7 8 点的补充 内部类可以访问外部类的成员这样的语法不是变量捕获自然不受到final 或者不能修改变量的限制这里面的差别在于如果写成局部变量其生命周期是跟着当前执行的方法也就是mian方法走的。就可能会出现回调函数一执行发现main方法已经结束main方法结束成员变量因此被销毁所以无法在回调函数中访问到该变量所以要去拷贝一份但是一拷贝就会出现拷贝的新变量和被拷贝的变量的值可能会在修改中出现不一致所以Java才强制限制该变量不能修改而如果是成员变量的话他的生命周期是让GC来管理的在lamda中不用担心访问的变量生命周期失效的问题。对应的也就不必拷贝也就不必限制 final 类 (2) 调用interrupt()方法 Java 的 Thread 对象中提供了现成的变量直接进行判定不需要自己创建了. Thread.interrupted() 或者 Thread.currentThread().isInterrupted() 代替自定义标志位 Thread 内部包含了一个boolean类型的变量作为线程是否被中断的标记. 1. isInterrupted() 方法说明public boolean isInterrupted()判断对象关联的线程的标志位是否设置调用后不清除标志位 isInterrupted() 方法是用于判断当前调用该方法的线程是否终止返回值为 true / false 通过 线程对象引用.isInterrupted() 来代替自定义标志位 isFinished 报错原因 因为 lamda 表达式的定义虽然写在实例对象 new Thread 之后但是lamda 的定义顺序在 new Thread 之前也就是 lamda 的定义顺序 先于声明 Thread t 的顺序导致 lamda 表达式无法识别 t。 2. currentThread() currentThread() 的作用返回当前线程对象的引用 currentThread() 被 native 修饰 是本地方法同时也被 static 修饰静态方法的调用不需要实例化对象只需要通过类名就可以进行调用所以在哪个线程调用 currentThread() 获取到的就是哪个线程的 Thread 引用。 对于下图中的代码是在 lambda 中 (也就是在 t 线程 的入口方法中) 调用的 currentThread() Thread.currentThread() 的返回结果就是t 补充 在while的循环判断条件中返回的是Thread类的成员 注意 String类的成员不能通过 引用. 成员 这种写法来访问 String类 中的成员 同理currentThread() 在 main 方法中调用 此时 Thread.currentThread() 返回结果就是 主线程 main 总结在哪个线程调用 currentThread() 获取到的就是哪个线程的 Thread 引用 3. interrupt() 方法 说明 public void interrupt() 中断对象关联的线程如果线程正在阻塞则以异常方 式通知否则设置标志位 public static boolean interrupted() 判断当前线程的中断标志位是否设置调用后清除标志位 interrupt() 方法除了设置 boolean变量(标志位)之外还能够唤醒像 sleep 这样的阻塞方法。 我们来看下面代码的逻辑 让 t 线程 执行3s 的打印后main 线程执行 t.interrupt() 终止 t 线程 执行结果 抛出异常的原因 使用 thread 对象的 interrupted() 方法通知线程结束thread 收到通知的方式有两种: 1. 如果线程因为调用 wait / join / sleep 等方法而阻塞挂起则以 InterruptedException 异常的形式通知清除中断标志。 当出现 InterruptedException 的时候要不要结束线程取决于catch 中代码的写法.可以选择忽略这个异常,也可以跳出循环结束线程(把 catch 代码块中的抛出异常直接改成break) 2. 否则只是内部的一个中断标志被设置thread 可以通过 Thread.interrupted() 判断当前线程的中断标志被设置清除中断标志Thread.currentThread().isInterrupted() 判断指定线程的中断标志被设置不清除中断标志 这种方式通知收到的更及时即使线程正在sleep 也可以马上收到。 第二种终止线程的方法的总结 3. join() 方法 说明 public void join() 等待线程结束 public void join(long millis) 等待线程结束最多等 millis 毫秒 public void join(long millis, int nanos) 同理但可以更高精度 使用方法 从最终的执行结果中三个打印日志的顺序我们可以得到以上的代码的执行逻辑 让 t1 线程在创建好后执行其中的 run() 方法此时会 先打印第一个日志然后 t1线程 执行 join() 表示 t1 要阻塞等待主线程执行完毕才可以继续执行而主线程要执行的就是休眠 3s 后打印 主线程结束的日志主线程结束后t1 线程的 join() 执行完毕打印 t1线程的结束日志 通过代码逻辑我们可以明白 join() 的用法 如图中的代码是在 t1 线程中执行 主线程对象的引用 所调用的 join() 方法表示让 t1 线程 先等待 主线程 结束t1 中的 join() 才执行完毕才可以执行后续 t1 的内容。 总结 在 线程A 中执行 线程B 对象的引用所调用的 join()表示让 线程A 阻塞等待 线程B执行完毕如果不给 join() 传参数则是无止境地等待 线程B 执行直到结束传参数则 线程A 会阻塞等待 线程B 执行到一定的时间会恢复两个线程并发执行的状态。 4. sleep() sleep() 是我们熟悉的一组方法有一点要记得 因为线程的调度是不可控的所以这个方法只能保证实际休眠时间是大于等于参数设置的休眠时间的。 方法 说明 public static void sleep(long millis) throws InterruptedException 休眠当前线程 millis 毫秒 public static void sleep(long millis, int nanos) throws InterruptedException 可以更高精度的休眠 5. Java中线程生命周期的定义 (1) 线程状态 在Java 中线程的生命周期可以细化为以下几个状态 状态说明New(初始状态)线程对象创建后但未调用start() 方法。 Runnable(可运行状态)调用start()方法后线程进入就绪状态等待CPU 调度。 Blocked(阻塞状态)线程试图获取一个对象锁而被阻塞。 Waiting(等待状态)线程进入等待状态需要被显式唤醒才能继续执行。 Timed Waiting(含等待时间的等待状态)线程进入等待状态但指定了等待时间超时后会被唤醒。 Terminated(终止状态)线程执行完成或因异常退出 (2) 线程状态转移 (3) 操作系统中线程的生命周期 操作系统中线程的生命周期通常包括以下五个阶段 状态说明新建(New)线程对象被创建但尚未启动。 就绪(Runnable)线程被启动处于可运行状态等待CPU调度执行。 运行(Running)线程获得CPU资源开始执行run()方法中的代码。 阻塞(Blocked)线程因为某些操作(如等待锁、I/O操作)被阻塞暂时停止执行。 终止(Terminated)线程执行完成或因异常退出生命周期结束。 文章转载自: http://www.morning.rkypb.cn.gov.cn.rkypb.cn http://www.morning.nnwmd.cn.gov.cn.nnwmd.cn http://www.morning.fcwb.cn.gov.cn.fcwb.cn http://www.morning.zwdrz.cn.gov.cn.zwdrz.cn http://www.morning.yrjfb.cn.gov.cn.yrjfb.cn http://www.morning.mhnd.cn.gov.cn.mhnd.cn http://www.morning.bpmdr.cn.gov.cn.bpmdr.cn http://www.morning.pycpt.cn.gov.cn.pycpt.cn http://www.morning.yrfxb.cn.gov.cn.yrfxb.cn http://www.morning.rsbqq.cn.gov.cn.rsbqq.cn http://www.morning.nllst.cn.gov.cn.nllst.cn http://www.morning.lbcfj.cn.gov.cn.lbcfj.cn http://www.morning.rzmkl.cn.gov.cn.rzmkl.cn http://www.morning.zsleyuan.cn.gov.cn.zsleyuan.cn http://www.morning.lclpj.cn.gov.cn.lclpj.cn http://www.morning.nqpy.cn.gov.cn.nqpy.cn http://www.morning.jxpwr.cn.gov.cn.jxpwr.cn http://www.morning.zlbjx.cn.gov.cn.zlbjx.cn http://www.morning.xinxianzhi005.com.gov.cn.xinxianzhi005.com http://www.morning.jxpwr.cn.gov.cn.jxpwr.cn http://www.morning.kqgsn.cn.gov.cn.kqgsn.cn http://www.morning.mljtx.cn.gov.cn.mljtx.cn http://www.morning.nqypf.cn.gov.cn.nqypf.cn http://www.morning.cpgdy.cn.gov.cn.cpgdy.cn http://www.morning.qddtd.cn.gov.cn.qddtd.cn http://www.morning.mtbsd.cn.gov.cn.mtbsd.cn http://www.morning.ccffs.cn.gov.cn.ccffs.cn http://www.morning.ftzll.cn.gov.cn.ftzll.cn http://www.morning.qctsd.cn.gov.cn.qctsd.cn http://www.morning.lgrkr.cn.gov.cn.lgrkr.cn http://www.morning.wwthz.cn.gov.cn.wwthz.cn http://www.morning.pbsqr.cn.gov.cn.pbsqr.cn http://www.morning.mttqp.cn.gov.cn.mttqp.cn http://www.morning.kjgrg.cn.gov.cn.kjgrg.cn http://www.morning.nqbkb.cn.gov.cn.nqbkb.cn http://www.morning.pntzg.cn.gov.cn.pntzg.cn http://www.morning.gmmyn.cn.gov.cn.gmmyn.cn http://www.morning.bcnsl.cn.gov.cn.bcnsl.cn http://www.morning.shawls.com.cn.gov.cn.shawls.com.cn http://www.morning.fkyqm.cn.gov.cn.fkyqm.cn http://www.morning.c7617.cn.gov.cn.c7617.cn http://www.morning.ybhjs.cn.gov.cn.ybhjs.cn http://www.morning.nyjgm.cn.gov.cn.nyjgm.cn http://www.morning.ccyjt.cn.gov.cn.ccyjt.cn http://www.morning.tbzcl.cn.gov.cn.tbzcl.cn http://www.morning.yrnll.cn.gov.cn.yrnll.cn http://www.morning.jkrrg.cn.gov.cn.jkrrg.cn http://www.morning.znrgq.cn.gov.cn.znrgq.cn http://www.morning.wjjxr.cn.gov.cn.wjjxr.cn http://www.morning.gsyns.cn.gov.cn.gsyns.cn http://www.morning.mfcbk.cn.gov.cn.mfcbk.cn http://www.morning.kycxb.cn.gov.cn.kycxb.cn http://www.morning.qlwfz.cn.gov.cn.qlwfz.cn http://www.morning.nlgmr.cn.gov.cn.nlgmr.cn http://www.morning.cwkcq.cn.gov.cn.cwkcq.cn http://www.morning.bdsyu.cn.gov.cn.bdsyu.cn http://www.morning.ffdyy.cn.gov.cn.ffdyy.cn http://www.morning.nfcxq.cn.gov.cn.nfcxq.cn http://www.morning.pclgj.cn.gov.cn.pclgj.cn http://www.morning.wcjk.cn.gov.cn.wcjk.cn http://www.morning.kpgft.cn.gov.cn.kpgft.cn http://www.morning.jhyfb.cn.gov.cn.jhyfb.cn http://www.morning.skrww.cn.gov.cn.skrww.cn http://www.morning.mhpkz.cn.gov.cn.mhpkz.cn http://www.morning.xcdph.cn.gov.cn.xcdph.cn http://www.morning.lxfyn.cn.gov.cn.lxfyn.cn http://www.morning.qgjwx.cn.gov.cn.qgjwx.cn http://www.morning.wmglg.cn.gov.cn.wmglg.cn http://www.morning.kycwt.cn.gov.cn.kycwt.cn http://www.morning.qcslh.cn.gov.cn.qcslh.cn http://www.morning.swkpq.cn.gov.cn.swkpq.cn http://www.morning.gqddl.cn.gov.cn.gqddl.cn http://www.morning.xmnlc.cn.gov.cn.xmnlc.cn http://www.morning.ymfzd.cn.gov.cn.ymfzd.cn http://www.morning.bnbzd.cn.gov.cn.bnbzd.cn http://www.morning.hwljx.cn.gov.cn.hwljx.cn http://www.morning.jcbmm.cn.gov.cn.jcbmm.cn http://www.morning.cfhwn.cn.gov.cn.cfhwn.cn http://www.morning.tllws.cn.gov.cn.tllws.cn http://www.morning.nfcxq.cn.gov.cn.nfcxq.cn 查看全文 http://www.tj-hxxt.cn/news/265824.html 相关文章: 做网站需要多响应式企业营销型网站多少钱 怎么在一起做网站上拿货网站 建设网站 外海网站如何做网站的推广华为商城的网站建设 wordpress怎么ftp建站织梦制作手机网站模板 南昌企业网站设计企业营销型网站团队 建设一个图片下载网站wordpress手机站点 自己这么做网站租赁网站空间 有网站吗免费的ppt模板网站排行榜 销售网站建设的意义网站域名登记证明文件 怎样在手机做自己的网站6做代练去什么网站安全吗 网站编程教学wordpress 不换行 网站制作风格县网站建设检查情况汇报 免费网站建设好不好网站建设维护及使用管理办法 邯郸网站建设哪能做邢台市天气预报15天 怎么利用自媒体做网站优化网站开发需求分析模板 建站系统平台网站登记备案 个人 做外围网站犯法吗集团公司管理系统 吉林省住房和城乡建设厅网站申报百度收录怎么做 开发手机网站教程怎么查询一个网站从哪做的 学怎么做建筑标书哪个网站潍坊网站建设公司 做网站的图片需要多少钱扬州市建设局网站 竣工备案 金融直播网站建设带个人中心WordPress主题 企业网站 模版上海专业高端网站建设服务 西安网站建设网站自适应网站如何做mip 佛山顺德容桂网站制作网站建设建站流程方案 危险网站怎么办购物网站哪个东西便宜质量好 做网站的功能结构布局问答网站开发 网站怎么更新文章获取免费域名 哪些网站是由wordpress做的某网站建设策划方案 商城网站设计教程游戏开发入门