• java线程锁


    线程安全问题都是由全局变量及静态变量引起的。若每个线程中对全局变量、静态变量只有读操作,
    而无写操作,一般来说,这个全局变量是线程安全的;
    若有多个线程同时执行写操作,一般都需要考虑线程同步,
    否则的话就可能影响线程安全
    public class Demo5Ticket {
    
        public static void main(String[] args) {
            //创建线程任务对象
            Ticket ticket = new Ticket();
            //创建三个窗口对象
            Thread t1 = new Thread(ticket, "窗口1");
            Thread t2 = new Thread(ticket, "窗口2");
            Thread t3 = new Thread(ticket, "窗口3");
    
            //卖票
            t1.start();
            t2.start();
            t3.start();
        }
    
        static class Ticket implements Runnable {
    
    //        Object lock = new Object();
            ReentrantLock lock = new ReentrantLock();
            private int ticket = 10000;
    
            public void run() {
                String name = Thread.currentThread().getName();
                while (true) {
    //                synchronized (lock) {
                    lock.lock();
                    sell(name);
                    lock.unlock();
    //                }
                    if (ticket <= 0) {
                        break;
                    }
                }
            }
    
            //private synchronized void sell(String name) {
            private void sell(String name) {
                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                if (ticket > 0) {
                    System.out.println(name + "卖票:" + ticket);
                    ticket--;
                }
            }
        }
    }

    当我们使用多个线程访问同一资源的时候,且多个线程中对资源有写的操作,
    就容 易出现线程安全问题。 要解决上述多线程并发访问一个资源的安全问题,
    Java中提供了同步机制 (synchronized)来解决。
    同步代码块
    

    Object lock = new Object();

    //创建锁

    synchronized(lock){      

    //可能会产生线程安全问题的代码

    }

    同步方法

    //同步方法

    public synchronized void method(){    

    //可能会产生线程安全问题的代码

    }

     
  • 相关阅读:
    codeforces 459C Pashmak and Buses(模拟,组合数A)
    HDU 4639 Hehe(字符串处理,斐波纳契数列,找规律)
    HDU 1671 Phone List(字符处理)
    网页爬虫【原创】【开源】
    asp.net mvc 配合前端js的CMD模块化部署思想,小思路
    [转]阎宏博士的JAVA与模式
    [转]使用设计模式改善程序结构(三)
    [转]使用设计模式改善程序结构(二)
    [转]使用设计模式改善程序结构(一)
    html符号转换
  • 原文地址:https://www.cnblogs.com/angdh/p/15564422.html
Copyright © 2020-2023  润新知