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();
        }
    }
  • 相关阅读:
    HDU 5091 Beam Cannon (扫描线思想)
    UVA12904 Load Balancing(中途相遇法)
    linux虚拟机时间同步
    linux shell
    项目bug
    定时发送邮件出现问题
    kafka里面的topic消费情况查看
    kafka常见命令
    HiJson简要说明
    zookeeper、hbase常见命令
  • 原文地址:https://www.cnblogs.com/zsben991126/p/12148298.html
Copyright © 2011-2022 走看看