您的位置:首页 > 编程语言 > Java开发

javaSE基础编程——线程同步(模拟火车站售票操作)

2015-09-04 18:42 841 查看

用多线程模拟火车站的售票操作。

   a.售票总数为100张车票

   b.由四个窗口(线程)模拟售票

   线程休眠1秒钟售一张火车票.

   要求:同步块,同步方法。

package com.cissst.software.synthread;
public class MainThread {
 /**

  * @param args

  * 5.用多线程模拟火车站的售票操作。

     *   a.售票总数为100张车票

     *   b.由四个窗口(线程)模拟售票

     * 线程休眠1秒钟售一张火车票.

  *  要求:同步块,同步方法0

  */

 public static void main(String[] args) {

  

  //创建子线程对象

  SicketThreadMethod sicket = new SicketThreadMethod();//下面用到两种实现线程同步的方法,二者选其一即可,用哪个就创建哪个子线程对象

  

  //启动四个窗口进行售票操作

        Thread t1 = new Thread(sicket,"窗口一");

        Thread t2 = new Thread(sicket,"窗口二");

        Thread t3 = new Thread(sicket,"窗口三");

        Thread t4 = new Thread(sicket,"窗口四");

       

        t1.start();

        t2.start();

        t3.start();

        t4.start();

 }
}

//用到同步代码块
package com.cissst.software.synthread;
/**

 * 模拟火车站售票操作

 * 线程同步操作

 * @author Administrator

 * @date2015-8-10

 *

 */

public class SicketThread implements Runnable {
 //售票总数

 private int count = 100;

 //创建同步代码块的锁对象(任意对象)

 Object lock = new Object();

 /**

  * 实现窗口售票

  */

 @Override

 public void run() {

  while(count > 0){

   try {

    Thread.sleep(1000);

   } catch (InterruptedException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

   }
//同步代码块

   synchronized(lock){    

    if(count > 0){

     System.out.println(Thread.currentThread().getName()+

       "正在售第" + count + "张车票");

     //售完一张车票,剩余总票数减一

     count --;

    }

   }

  }

 }
}

//用到同步方法

package com.cissst.software.synthread;

/**

 * 模拟火车站售票操作

 * 线程同步操作

 * @author Administrator

 * @date2015-8-10

 *

 */

public class SicketThreadMethod implements Runnable {

 //售票总数

 private int count = 100;

 /**

  * 实现窗口售票

  */

 @Override

 public void run() {

  while(count > 0){

   try {

    Thread.sleep(1000);

   } catch (InterruptedException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

   }

   sellTicket();

  }

 }

 

 /**

  * 模拟售票操作

  * 同步方法: 方法的声明中加入synchronized关键字

  */

 public synchronized void sellTicket(){

  if(count > 0){

   System.out.println(Thread.currentThread().getName()+

     "正在售第" + count + "张车票");

   //售完一张车票,剩余总票数减一

   count --;

  }

 }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: