zoukankan      html  css  js  c++  java
  • JAVA中线程同步的方法(4种)汇总

     

    package com.xhj.thread;
     
        /**
         * 线程同步的运用
         * 
         * @author XIEHEJUN
         * 
         */
        public class SynchronizedThread {
     
            class Bank {
                private int account = 100;
                public int getAccount() {
                    return account;
                }
     
                /**
                 * 1.用同步方法实现
                 * 
                 * @param money
                 */
                public synchronized void save(int money) {
                    account += money;
                }
     
                /**
                 * 2.用同步代码块实现
                 * 
                 * @param money
                 */
                public void save1(int money) {
                    synchronized (this) {
                        account += money;
                    }
                }
            }

    3.wait与notify

    wait():使一个线程处于等待状态,并且释放所持有的对象的lock。

    sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。
    notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。
    Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

    4.使用特殊域变量(volatile)实现线程同步

        a.volatile关键字为域变量的访问提供了一种免锁机制
        b.使用volatile修饰域相当于告诉虚拟机该域可能会被其他线程更新
        c.因此每次使用该域就要重新计算,而不是使用寄存器中的值 
        d.volatile不会提供任何原子操作,它也不能用来修饰final类型的变量 
        
        例如: 
            在上面的例子当中,只需在account前面加上volatile修饰,即可实现线程同步。 
    //只给出要修改的代码,其余代码与上同
            class Bank {
                //需要同步的变量加上volatile
                private volatile int account = 100;
     
                public int getAccount() {
                    return account;
                }
                //这里不再需要synchronized 
                public void save(int money) {
                    account += money;
                }
            }
  • 相关阅读:
    使用PHPMYADMIN添加新用户和数据库
    phpMyadmin用户权限中英对照
    Asp生成xml乱码解放方法
    SQL Server 错误日志
    安装VS2005 SP1时失败(错误 1718。文件被数字签名策略拒绝)的解决办法!
    CKEditor 3 JavaScript API Documentation
    CKEditor在.NET中的应用
    IIS 添加网站显示错误消息 “无更多可用的内存以更新安全信息” 解决方法
    jQuery 操作Cookie
    JavaScript/HTML格式化
  • 原文地址:https://www.cnblogs.com/yuyangcoder/p/9929418.html
Copyright © 2011-2022 走看看