码迷,mamicode.com
首页 > 编程语言 > 详细

线程模拟售票问题

时间:2018-12-17 02:22:03      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:学习   重要   out   ring   run   package   syn   rgs   else   

线程是我们学习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;
}
}
}
}
}

线程模拟售票问题

标签:学习   重要   out   ring   run   package   syn   rgs   else   

原文地址:https://www.cnblogs.com/zhouguoshuai/p/10129106.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!