zoukankan      html  css  js  c++  java
  • java基础——同步方法

    实现Runnable的同步方法

    package synchronization.method;
    /*
    用同步方法解决实现Runnable的安全问题
    
    @author zsben
    @create 2020-01-03 13:48
    */
    
    class WindowRun implements Runnable{
    
        private int ticket = 100;
    
        @Override
        public void run() {
            while (true) {
               show();
            }
        }
    
        private synchronized void show(){//用的那把锁就是this
            if (ticket > 0) {
                System.out.println(Thread.currentThread().getName() + ": " + ticket);
                ticket--;
            }
        }
    }
    
    public class WindowRunnableTest {
        public static void main(String[] args) {
            WindowRun windowRun = new WindowRun();
    
            Thread t1 = new Thread(windowRun);
            Thread t2 = new Thread(windowRun);
            Thread t3 = new Thread(windowRun);
    
            t1.start();
            t2.start();
            t3.start();
        }
    }

    继承Thread的同步方法

    package synchronization.method;
    
    /*
    创建三个窗口买票,总票数为100张
    
    同步方法解决总结:
        1.同步方法仍然需要同步锁,只是不需要显示声明
        2. 非静态(实现Runnable)的同步方法:同步监视器是this
           静态(继承Thread类)的同步方法:同步监视器是当前类本身
    @author zsben
    @create 2020-01-03 12:41
    */
    
    class Window extends Thread{
        private static int ticket = 100;
    
        @Override
        public void run() {
            while(true) {
                show();
            }
        }
        private static synchronized void show(){//同步监视器就是Window.class
            try {
                sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            if (ticket > 0) {
                System.out.println(Thread.currentThread().getName() + ": " + ticket);
                ticket--;
            }
        }
    }
    
    public class WindowThreadTest {
        public static void main(String[] args) {
            Window t1 = new Window();
            Window t2 = new Window();
            Window t3 = new Window();
    
            t1.setName("窗口1");
            t2.setName("窗口2");
            t3.setName("窗口3");
    
            t1.start();
            t2.start();
            t3.start();
        }
    }
  • 相关阅读:
    nginx实现文件分享
    DataTable.Compute强大的功能
    flink学习01
    flink学习02
    ASIS TOBE
    Oracle安装
    运营与运维
    用户与租户的区别
    书的复制记录方案DP
    模拟题5
  • 原文地址:https://www.cnblogs.com/zsben991126/p/12148298.html
Copyright © 2011-2022 走看看