Java线程生命周期及其使用,sleep与interrupt的使用,wait与notify
2016-07-13 08:56
597 查看
工作内容:
1.回顾单例模式和简单工厂模型
2.学习Java多线程机制
学习分享:
线程:进程的一条执行路径
一、线程的生命周期:新建→(start)就绪→(获取资源执行run语句)运行状态→堵塞状态(sleep)→(run语句执行完)终止
二、线程实现方式:
1.继承Thread.
2.实现Runnable接口【可以实现多线程的资源共享】
三、Thread.sleep(毫秒数)与Thread. Interrupt()的使用:
1.sleep方法需在线程start之后执行,该方法是使当前线程进入阻塞状态,持续时间是‘毫秒数’。
2.在使用sleep方法后,使用interrup方法可以使sleep执行catch部分语句(可以在catch语句中使用return语句来终止该线程)
3.Thread.yield()方法会使当前线程进入就绪状态,重新等待资源
4.object.wait()方法(属于Object)可以使object处于等待状态,这个object将一直不能变动【变动也是无效的变动】,直到object.notify/notifyAll来唤醒这个object之后才可队这个object做操作
5.线程优先级的设置:
a) 实现Runnable接口——在线程start()之前设置
b) 继承自Thread,可以在构造方法中使用this.setPriority(int权值)来设置
执行结果:
共享票数
1.回顾单例模式和简单工厂模型
2.学习Java多线程机制
学习分享:
线程:进程的一条执行路径
一、线程的生命周期:新建→(start)就绪→(获取资源执行run语句)运行状态→堵塞状态(sleep)→(run语句执行完)终止
二、线程实现方式:
1.继承Thread.
2.实现Runnable接口【可以实现多线程的资源共享】
三、Thread.sleep(毫秒数)与Thread. Interrupt()的使用:
1.sleep方法需在线程start之后执行,该方法是使当前线程进入阻塞状态,持续时间是‘毫秒数’。
2.在使用sleep方法后,使用interrup方法可以使sleep执行catch部分语句(可以在catch语句中使用return语句来终止该线程)
3.Thread.yield()方法会使当前线程进入就绪状态,重新等待资源
4.object.wait()方法(属于Object)可以使object处于等待状态,这个object将一直不能变动【变动也是无效的变动】,直到object.notify/notifyAll来唤醒这个object之后才可队这个object做操作
5.线程优先级的设置:
a) 实现Runnable接口——在线程start()之前设置
b) 继承自Thread,可以在构造方法中使用this.setPriority(int权值)来设置
//测试实现Runnable的使用【实现资源共享】 public class RunnableDemo implements Runnable { private int tickets = 50; @Override public void run() { while (tickets > 0) { System.out.println(Thread.currentThread().getName() + "正在卖票,还剩" + (tickets--) + "张票"); } } } //测试用例 public class Test { public static void main(String[] args) { RunnableDemo sale = new RunnableDemo(); Thread window1 = new Thread(sale, "一号"); Thread window2 = new Thread(sale, "二号"); Thread window3 = new Thread(sale, "三号"); window1.start(); window2.start(); window3.start(); } }
执行结果:
共享票数
//测试sleep和interrup的使用 public class RunnableDemo implements Runnable { private int tickets = 50; @Override public void run() { while (tickets > 0) { System.out.println(Thread.currentThread().getName() + "正在卖票,还剩" + (tickets--) + "张票"); try { Thread.sleep(1000); } catch (InterruptedException e) { System.out.println("抛出异常"); return;// 如果这里没有使用return,则程序继续执行 } } } }
public class Test { public static void main(String[] args) { // MultiThreadingTest myMultiThreadingTest = new MultiThreadingTest(); // myMultiThreadingTest.start(); // for (int i = 0; i < 1000; i++) { // System.out.println(Thread.currentThread().getName()); // } RunnableDemo sale = new RunnableDemo(); Thread window1 = new Thread(sale, "一号"); // Thread window2 = new Thread(sale,"二号"); // Thread window3 = new Thread(sale,"三号"); window1.start(); // window2.start(); // window3.start(); try { Thread.sleep(3000); } catch (InterruptedException e) { System.out.println("主线程暂停异常"); } window1.interrupt(); System.out.println("执行结束"); } }
相关文章推荐
- eclipse 向下复制无效 ctrl+alt+down
- java学习之路
- Java学习- 他人的 总结 printf总结
- java开发中的一些好的原则和习惯
- Java FutureTask正确使用姿势
- 北交-程序设计II-个人训练报告
- Java中IO流的File类
- java中的对象序列化
- JAVA开发过程中的各种小坑
- java控制台输出print和println详解
- java之内部类(InnerClass)----非静态内部类、静态内部类、局部内部类、匿名内部类
- Spring Framework笔记(二)
- java静态与非静态区别
- java链式编程设计
- Spring Framework笔记(一)
- JavaEE学习笔记之SSH—Struts2(4)
- 分布式云+dubbo+zookeeper+Springmvc+mybatis+restful整合
- 来自阿里的Dubbo分布式服务
- java提高篇之异常(上)
- eclipse不自动弹出提示(alt+/快捷键失效)