线程模拟售票问题
Posted zhouguoshuai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程模拟售票问题相关的知识,希望对你有一定的参考价值。
线程是我们学习Java知识中一个重要的难点,首先我们要明白两种创建线程的方法,其次在售票问题中我们要注意线程并发带来的线程安全问题。
最后我们要明白几个重要的概念:
①保证代码原子性:所谓代码原子性是指当a线程在执行某段代码块的时候,别的线程必须等待 ,直到a线程执行完才可以执行这段代码。
②对象锁:java中处理线程同步的办法非常简单,只需要在你需要同步的代码块上加上语句:synchronized (object) {需要同步的代码块} ,即可。
③获取线程名称的方法:Thread.currentThread().getName()。
代码如下:
package com.thread;
public class ThreadShouPiao {
/**
* 功能:线程售票:解决线程并发带来的线程安全问题(保证代码的原子性)
* 对象锁的概念
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建一个售票窗口对象
ThreadWindowTicks twk=new ThreadWindowTicks();
//创建三个线程,同时启用
Thread th1=new Thread(twk);
Thread th2=new Thread(twk);
Thread th3=new Thread(twk);
th1.start();
th2.start();
th3.start();
}
}
//窗口售票类
class ThreadWindowTicks implements Runnable{
private int piao_num=2000;
public void run() {
// TODO Auto-generated method stub
while(true){
//要保证if else语句原子性(同步代码块)
synchronized (this) {//对象锁
if(piao_num>0&&piao_num<=2000){
System.out.println(Thread.currentThread().getName()+"卖第"+piao_num+"张票");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
piao_num--;
}
else {
break;
}
}
}
}
}
以上是关于线程模拟售票问题的主要内容,如果未能解决你的问题,请参考以下文章