zoukankan      html  css  js  c++  java
  • Java-jdk1.4解决多线程同步问题两种实现方式-同步函数和同步代码块关键字synchronized

    class Ticket implements Runnable {
        //1.描述票的数量
        private int tickets = 100;
        
        //2.售票的动作,这个动作需要被多线程执行,那就是线程任务代码,需要定义run方法中
        //线程任务中通常都有循环结构
        
        private Object obj = new Object();
        public void run() {
            /*
            //使用同步代码块解决多线程安全问题
            synchronized(obj) {
                while (true) {
                    if (tickets > 0) {
                        System.out.println(Thread.currentThread().getName() + "  "+ tickets--);
                    }
                }
            }
            */
            
            while(true) {
                this.sale();
            }        
        }
        //解决多线程安全问题第二种方式通过同步函数
        /*
            同步函数使用的锁是固定的this,当线程任务需要一个同步时可以使用同步函数
            同步代码块使用的锁可以是任意一个对象,当线程任务需要多个同步时,必须通过锁来区分,这时只能使用同步代码块了
            
        */
        public synchronized void sale() {
            if (tickets > 0) {
                try{Thread.sleep(10);}catch(InterruptedException e){}
                System.out.println(Thread.currentThread().getName() + "  "+ tickets--);
            }
        }
    }
    
    
    public class ThreadDemo3 {
        public static void main(String[] args) {
            //1.创建Runnable接口的子类对象
            Ticket t = new Ticket();
            //2创建4个线程对象,并将Runnable接口的子类对象作为参数传递给Thread的构造函数
            Thread t1 = new Thread(t);
            Thread t2 = new Thread(t);
            Thread t3 = new Thread(t);
            Thread t4 = new Thread(t);
            
            //3.开启4个线程
            t1.start();
            t2.start();
            t3.start();
            t4.start();
            
            
        }
    }
  • 相关阅读:
    gridview 列排序问题
    asp.net中session丢失原因分析
    网页flash挡住了TQ的解决办法
    php正确率比较高的安装教程
    PHP5+APACHE2.2配置
    HTML5: HTML5 网站设计作品欣赏
    ASP.NET开源CMS汇总
    ASP.NET:页面传值的几种方式
    Access:数据库操作常见错误
    observer pattern
  • 原文地址:https://www.cnblogs.com/wgDream/p/7308721.html
Copyright © 2011-2022 走看看