• java多线层同时运行的解决,同步代码块synchronized


    /*
    多个线层同时操作一个数据
    会导制数据超出
    同步代码块
    synchronized(对像)
    {
    需要同步的代码
    }
    */
    
    class Do7 
    {
        public static void main(String[] args) 
        {
                Piao p1=new Piao();
                Thread t1=new Thread(p1);
                Thread t2=new Thread(p1);
                Thread t3=new Thread(p1);
                Thread t4=new Thread(p1);
                t1.start();t2.start();t3.start();t4.start();
        }
    }
    
    class Piao implements Runnable
    {
        private  static int num=200;
      
        public void run()
        {
    
            while(true)
            {
                //  Object obj=new Object();//随便创建一个对象,用于synchronized(对像)
                // synchronized(this)中可以放this,也可以放synchronized(obj)
             synchronized(this)///同步代码块
            {
            if (num>0)
            {
                try{Thread.sleep(10);}catch(Exception e){}
                System.out.println(Thread.currentThread().getName()+"....."+num--);
            }
            else{
            return;}
    }
            }
        }
    }

     第二种方式

    /*
    多个线层同时操作一个数据
    会导制数据超出
    同步代码块
    synchronized(对像)
    {
    需要同步的代码
    }
    */
    
    class Do7 
    {
        public static void main(String[] args) 
        {
                Piao p1=new Piao();
                Thread t1=new Thread(p1);
                Thread t2=new Thread(p1);
                Thread t3=new Thread(p1);
                Thread t4=new Thread(p1);
                t1.start();t2.start();t3.start();t4.start();
        }
    }
    
    class Piao implements Runnable
    {
        private int num=100;
        public void run()
        {
            while(true)
            {
             show();
            }
        }
        public synchronized void show()
        {
            
                    if (num>0)
                     {
                     try{Thread.sleep(10);}catch(Exception e){}
                     System.out.println(Thread.currentThread().getName()+"....."+num--);
                    }
                      else{
                     return;
                       }
            
        }
        
    }
  • 相关阅读:
    分享一下我珍藏的各种资料。
    JEditorPane中html文档中文乱码解决
    ubuntu恢复rm -rf误删文件
    MBR与分区表备份与恢复
    ubuntu tab命令补全失效
    selinux理解1-selinux介绍
    Mac-Xcode统计整个项目代码行数
    Mac清理空间-Xcode-删除相关文件
    # iOS开发
    Charles问题总结-最新版4.5.6
  • 原文地址:https://www.cnblogs.com/zywf/p/4714504.html
Copyright © 2020-2023  润新知