多线程的四种状态及同步机制的应用(火车票线程同步)
来源:互联网 发布:java如何让窗口置顶 编辑:程序博客网 时间:2024/06/05 12:39
线程的四种状态:
新生状态、就绪状态、运行状态、阻塞状态和死亡状态。
新生状态通过new关键字来获得一个新生的线程对象、这个时候线程既没有内存也没有运行所以是新生状态
而后调用它的 start方法进入就绪状态,这个时候线程启动前的一些列准备都做好了,准备获得cpu调度
获得cpu调度以后就进入了运行状态这个时候线程已经在运行了,本来不可打断的但是有些方法可以中断线程的运行,进入阻塞状态
阻塞状态:sleep,使线程进入睡眠有时间限制当睡眠的时间已过线程重新进入就绪状态等待cpu的调用,join,插队,A线程在运行时被B线程调用join方法插队,这个时候A线程会让出cpu的使用权而让B线程运行完毕以后再接着进入就绪状态而后运行,wait,A线程在这个方法以后不会在运行会停下来等待其他线程运行,直到notify方法唤醒这个线程以后才可以继续运行。
死亡状态:所有的线程在完成或未完成任务以后都会进入死亡状态,让出cpu的使用权。
同步机制:
如何实现同步机制,使用synchronized关键字
同步的前提:
必须有两个或两个以上的线程
必须是多个线程使用同一资源
必须保证同步中只能有一个线程在运行
上锁可以锁变量也可以锁方法
同步可以保证资源共享操作的正确的性,但是过多同步会产生死锁问题。
多线程模拟卖票
package com.lx;/** * 多线程模拟的卖票 * * @author Administrator * *//* * 1. 设计一个多线程的程序如下:设计一个火车售票模拟程序。假如火车站要有100张火车票要卖出,现在有5个售票点同时售票, * 用5个线程模拟这5个售票点的售票情况。 */public class Ticket implements Runnable {Integer p = 100;@Overridepublic synchronized void run() {Thread c = Thread.currentThread();String name = c.getName();synchronized (p) {if (p > 0) {try {Thread.sleep(1);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println(name + "卖了第" + p + "张票");p--;} else {System.out.println("卖完了");}}}public static void main(String[] args) {Ticket t = new Ticket();for (int i = 0; i <= 20; i++) {Thread z1 = new Thread(t);z1.setName("窗口一");Thread z2 = new Thread(t);z2.setName("窗口二");Thread z3 = new Thread(t);z3.setName("窗口三");Thread z4 = new Thread(t);z4.setName("窗口四");Thread z5 = new Thread(t);z5.setName("窗口五");z1.start();z2.start();z3.start();z4.start();z5.start();}}}
阅读全文
0 0
- 多线程的四种状态及同步机制的应用(火车票线程同步)
- 多线程的例子,火车票同步
- 多线程(四)线程的同步之同步代码块
- 多线程(四)线程的同步之同步方法
- 多线程(四)线程的同步之线程安全问题
- 线程概念,状态及状态之间的关系,实现多线程方法,实现同步线程的方式
- 同步多线程的同步机制
- 多线程编程之四 线程的同步
- 多线程的使用方法、线程同步、线程状态及相应的一些线程函数用法、概述等。
- 四种多线程同步机制
- C++多线程编程(四)线程的同步
- C++多线程编程(四)线程的同步
- 多线程的同步机制
- 【多线程】线程的同步
- WIN32多线程四 线程同步机制Mutex(转)
- 线程的同步机制
- 线程的同步机制
- 线程的同步机制
- SpringCloud(九):Ribbon脱离Eureka使用及原生api
- 233 Matrix HDU
- 欢迎使用CSDN-markdown编辑器
- Android Studio起步配置
- [OpenGL] Normal Mapping 法线映射
- 多线程的四种状态及同步机制的应用(火车票线程同步)
- UVa1629 Cake Slicing
- poj 2985 The k-th Largest Group (Treap+并查集)
- python3与2的区别
- Hbase shell 命令
- Spring事务管理
- linux系统服务状态
- 三(6)、JSP九大内置对象——application
- xml之JDOM解析(含乱码处理)