我是靠谱客的博主 辛勤方盒,最近开发中收集的这篇文章主要介绍多线程演示:两个线程《卖票》,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

/*

 * 用两个线程进行:卖票

 *

 * 同步函数用的是哪一个锁呢?

 * 函数需要被对象调用,那么函数都有一个所属对象引用。就是this.

 * 所以同步函数使用的锁是this.

 *

 * 如何找问题:

 * 1,明确哪些代码是多线程运行代码

 * 2,明确共享数据

 * 3,明确多线程运行代码中哪些语句是操作共享数据的。、

 */

class Ticket implements Runnable

{

    //将票私有500张票

    private int tick = 500;

   

    //定义一个标记,用来切换两个线程

    boolean flag = true;

   

    //覆盖runnable中的run方法

    public void run()

    {

       if(flag)

       {

           //打印车票

           while(true)

           {

             

              //如果show方法被静态修饰,这里调用的对象是Ticket.class

              synchronized(this)//因为run方法调用的show()方法,show方法调用的是this.所以这里是this

              {

                  if(tick>0)

                  {

                     try{Thread.sleep(10);}catch(Exception e){}

                     System.out.println(Thread.currentThread().getName()+"同步售票"+tick--);

                  }

              }

           }

       }

       else

           while(true)

              show();

    }

   

    //对操作共享数据的代码块进行封装

    public synchronized void show()

    {

       if(tick>0)

       {

           try{Thread.sleep(10);}catch(Exception e){}

           //currentThread();获取线程名称

           System.out.println(Thread.currentThread().getName()+"..同步函数售票.."+tick--);

       }

    }

   

}

public class _08线程同步 {

   

    public static void main(String[]args)

    {

       Ticket t = new Ticket();

      

       //创建线程

       Thread t1 = new Thread(t);

       Thread t2 = new Thread(t);

      

       t1.start();

      

      

       //当主函数执行到这儿时,让它停留10;原因是,main主函数线程会瞬间将两个线程开启执行,

       //所以当线程执行到t.falg=false时,会直接执行到show方法

       try{Thread.sleep(10);}catch(Exception e){}

       t.flag = false;

       t2.start();

      

    }

}

 

最后

以上就是辛勤方盒为你收集整理的多线程演示:两个线程《卖票》的全部内容,希望文章能够帮你解决多线程演示:两个线程《卖票》所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部