多线程基础 -1
来源:互联网 发布:淘宝秒杀网页 编辑:程序博客网 时间:2024/05/16 07:16
package thread.learn.threadbasic;import java.sql.Time;import java.util.TimeZone;import java.util.concurrent.TimeUnit;import static java.util.concurrent.TimeUnit.MILLISECONDS;/** * 介绍线程的常用方法 * 停止,睡眠, 礼让,守护,命名,优先级,join(). */public class ThreadMethod { public static void main(String[] args) { /* 守护线程 会随着主线程结束而结束*/ Thread deamon = new Thread(new Runnable() { public void run() { while (true) { } } }); deamon.setName("deamon"); deamon.setDaemon(true); deamon.start(); /* 工作线程*/ Thread work = new Thread(new Runnable() { public void run() { //睡眠 默认毫秒 可以指定 单位. System.out.println("start work"); try { System.out.println(Thread.currentThread(). getName() + "I AM SLEEPING"); Thread.sleep(5000); } catch (InterruptedException e) { // 这里为何要 catch异常 InterruptedException? // 因为 如果线程在休眠过程中 被调用 interrupt() 方法 // 这里将会 无法打上 isInterrupted 标记, isInterrupted 为false, // 说明 调用的 interrupt();无效,若需要起作用, // 这里需要再次调用interrupt() System.out.println(Thread.currentThread(). getName() + "catch InterruptedException"); System.out.println(Thread.currentThread(). getName() + ":isInterrupted?==" + Thread. currentThread().isInterrupted()); } System.out.println("finish work"); } }); //命名 非常重要, 日志分析线程问题的时候 良 // 好的线程名可以迅速定位问题. work.setName("work_thread"); //优先级 ,高的 获取CPU 几率大. work.setPriority(Thread.MAX_PRIORITY); // 启动 work.start(); /* 线程停止的方法,当线程调用该方法, 线程会先被打上标记 需要停止,再停止 */ try { Thread.sleep(1000); // 这里等待一秒确保 work线程进入休眠 } catch (InterruptedException e) { e.printStackTrace(); } work.interrupt(); //线程是否是打上了需要停止的标记 System.out.println(work.getName() + ":isInterrupted?==" + work.isInterrupted()); //是否还存活' System.out.println(work.getName() + ":isAlive?==" + work.isAlive()); try { // work线程执行完成后,这句代码所在的 // 线程(这里是mian线程)才执行下一句. work.join(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(work.getName() + "isAlive?==" + work.isAlive()); }}
* 执行结果 start work work_threadI AM SLEEPING work_threadcatch InterruptedException work_thread:isInterrupted?==false finish work work_thread:isInterrupted?==false work_thread:isAlive?==false work_threadisAlive?==false
如果去掉 try { Thread.sleep(1000); // 这里等待一秒确保 work线程进入休眠 } catch (InterruptedException e) { e.printStackTrace(); }
那么运行结果为:
work_thread:isInterrupted?==true start work work_threadI AM SLEEPING work_threadcatch InterruptedException work_thread:isInterrupted?==false finish work work_thread:isAlive?==true work_threadisAlive?==false
这里isInterrupted结果为true, 然后进入work线程的异常块中的时候
isInterrupted 结果为false; 分析是线程调用interrupte()方法后,会把标记打成true此时isInterrupted 为true,标识这个线程将要停止,如果这时候线程进入睡眠,那么isInterrupted 将被转为false;
阅读全文
0 0
- 多线程编程1 基础
- java多线程基础1
- 多线程1(java基础)
- 多线程(1):基础
- 多线程基础 -1
- 多线程基础(1)
- JAVA多线程编程基础1
- linux多线程编程基础1
- java基础入门----多线程1
- java多线程(1):基础
- Java多线程1:线程基础
- java多线程(1)---基础
- java多线程基础(1)
- 多线程基础篇1---------<thread>
- 多线程基础
- 多线程基础
- 多线程基础
- 多线程基础
- bzoj3411 [Usaco2009 Dec]Bobsledding 高山滑雪
- 数论——最大公约数和最小公倍数
- VS 内存问题
- 使用Canvas画一个弹跳的皮球
- Linux上安装ZooKeeper并设置开机启动(CentOS7+ZooKeeper3.4.10)
- 多线程基础 -1
- markdown
- POJ 刷题系列:1083. Moving Tables
- 第一个示例程序FreakOut编译问题
- 对于stm32,初学者用库函数好还是直接对寄存器操作比较好
- pat考试总结
- 分布式端口扫描利刃: 使用DNmap创建Nmap集群
- HttpClient4.5 Apache 教程 [记录]
- Unity中的meta文件问题