• Java-多线程-安全性-lock技术


    package cn.bruce.Thread;
    
    import java.util.concurrent.locks.Lock;
    import java.util.concurrent.locks.ReentrantLock;
    
    //多线程售票案例
    //解决安全问题,JAVA程序提供了lock技术{线程要操作的共享数据}
    
    public class MoreThreadDemo3 {
        public static void main(String[] args) {
            // 创建Runnable接口实现类对象
            Ticket t = new Ticket();
            // 创建三个Thread类对象,传递Runnable接口实现类
            Thread t0 = new Thread(t, "窗口1");
            Thread t1 = new Thread(t, "窗口2");
            Thread t2 = new Thread(t, "窗口3");
            // 开启线程
            t0.start();
            t1.start();
            t2.start();
    
        }
    }
    
    class Ticket implements Runnable {
        private int number = 100;
        // 在类的成员位置,创建LOCK接口的实现类对象
        private Lock lock = new ReentrantLock();
    
        public void run() {
            while (true)
            {
                payTicket();
            }
        }
    
        public synchronized void payTicket() {// 同步方法技术
            // 对票数做判断,大于0 可以出售
            // 调用lock接口方法lock获取锁对象
            lock.lock();// 加锁
            if (number > 0)
            {
                try
                {
                    Thread.sleep(10);// 使用休眠,模拟CPU切换
                    System.out.println(Thread.currentThread().getName() + "出售第" + number--);
                } catch (Exception e)
                {
                    e.printStackTrace();
                } finally
                {
                    lock.unlock();// 无论有没有异常 都会解锁
                }
    
            }
        }
    }
  • 相关阅读:
    K&R C C90,C99的改进
    Windows 用来定位 DLL 的搜索路径
    常量字符串的问题
    C++0x中一些有用的新特性
    mainfest机制
    mainfest机制
    C++0x中一些有用的新特性
    c语言目标程序中的段
    c语言目标程序中的段
    数据模型(LP32 ILP32 LP64 LLP64 ILP64 )
  • 原文地址:https://www.cnblogs.com/BruceKing/p/13572550.html
Copyright © 2020-2023  润新知