创建三个窗口进行卖票 总票100张 使用实现Runnable接口的方法实现

例子:创建三个窗口进行卖票 总票100张 使用实现Runnable接口的方法

  • 解决线程安全的问题:
  • 当一个线程在操作ticket的时候,其他线程不能参与进来,直到线程A操作完ticket时候,其他线程才能开始操作,这种情况即使线程A出现了阻塞,也不能被改变
  • 同步代码块::
  • synchronized(同步监视器){
  • 需要同步的代码
  • }
  • 说明:操作共享数据的代码 就是同步代码
  • 共享数据:多个线程共同操作的变量 如ticket
  • 同步监视器:俗称:锁,任何一个类的对象都可以当做
  • 要求:多个线程,必须共用同一把锁
  • 同步方法
  • 同步的方式解决了线程的安全问题-----好处
  • 操作同步代码块的时候 只能有一个线程参与,其他线程等待。相当于是一个单线程的过程,效率低----局限性

上代码

class Window1 implements Runnable {
    private int ticket = 100;
    Object obj = new Object();

    @Override
    public void run() {
        //进行卖票
        while (true) {

            synchronized (obj) {
                if (ticket > 0) {
                    System.out.println(Thread.currentThread().getName() + ":卖票,票号为:" + ticket);
                    ticket--;
                } else {
                    break;
                }
            }
        }
    }
}

public class WindowTest1 {
    public static void main(String[] args) {
        //主程序 运行
        Window1 w = new Window1();
        Thread t1 = new Thread(w);
        Thread t2 = new Thread(w);
        Thread t3 = new Thread(w);

        t1.setName("窗口一:");
        t2.setName("窗口一:");
        t3.setName("窗口一:");
        //开启线程
        t1.start();
        t2.start();
        t3.start();

    }
}


版权声明:本文为sunyingboaini原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。