zoukankan      html  css  js  c++  java
  • 编程开发之--java多线程学习总结(2)同步代码块

    1、第一种解决办法:同步代码块,关键字synchronized

    package com.lfy.ThreadsSynchronize;
    
    /**
     * 1、使用同步代码块
     * 语法:
        synchronized (同步锁) {
            //需要同步操作的代码         
        }
     
        同步锁:为了保证每个线程都能正常的执行原子操作,Java 线程引进了同步机制;同步锁也叫同步监听对象、同步监听器、互斥锁;
        Java程序运行使用的任何对象都可以作为同步监听对象,但是一般我们把当前并发访问的共同资源作为同步监听对象
         
        注意:同步锁一定要保证是确定的,不能相对于线程是变化的对象;任何时候,最多允许一个线程拿到同步锁,谁拿到锁谁进入代码块,而其他的线程只能在外面等着
    */
    public class TicketSellSolution1 extends Thread{
    
        private static int num = 50;
         
        public TicketSellSolution1(String string) {
            super(string);
        }
        
        @Override
        public void run() {
            for(int i = 0 ; i < 50 ;i ++){
                //这里我们使用当前对象的字节码对象作为同步锁
                synchronized (this.getClass()) {
                    if(num > 0){
                        try {
                            Thread.sleep(10);//模拟卖票需要一定的时间
                        } catch (InterruptedException e) {
                            // 由于父类的 run()方法没有抛出任何异常,根据继承的原则,子类抛出的异常不能大于父类, 故我们这里也不能抛出异常
                            e.printStackTrace();
                        }
                        System.out.println(Thread.currentThread().getName()+"卖出一张票,剩余"+(--num)+"张");
                    }
                }
            }
        }
    }
  • 相关阅读:
    第一章-实例7-猴子吃桃问题
    第一章-实例6-判断是否为闰年
    第一章-实例3-计算变量所占字节数
    IDEA学习笔记
    spring boot学习概要(尚硅谷)
    JSP动态WEB开发技术--第一章
    学习前端的准备任务
    cmd优化
    软件测试基础概念
    软件工程理论
  • 原文地址:https://www.cnblogs.com/ZeroMZ/p/9292411.html
Copyright © 2011-2022 走看看