java如何实现同步的简单介绍

博主:adminadmin 2023-03-19 15:04:07 690

本篇文章给大家谈谈java如何实现同步,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java 实现线程同步的方式有哪些

实现同步机制有两个方法:

1、同步代码块:

synchronized(同一个数据){} 同一个数据:就是N条线程同时访问一个数据。

2、同步方法:

public synchronized 数据返回类型 方法名(){}

就是使用 synchronized 来修饰某个方法,则该方法称为同步方法。对于同步方法而言,无需显示指定同步监视器,同步方法的同步监视器是 this 也就是该对象的本身(这里指的对象本身有点含糊,其实就是调用该同步方法的对象)通过使用同步方法,可非常方便的将某类变成线程安全的类,具有如下特征:

1,该类的对象可以被多个线程安全的访问。

2,每个线程调用该对象的任意方法之后,都将得到正确的结果。

3,每个线程调用该对象的任意方法之后,该对象状态依然保持合理状态。

注:synchronized关键字可以修饰方法,也可以修饰代码块,但不能修饰构造器,属性等。

实现同步机制注意以下几点: 安全性高,性能低,在多线程用。性能高,安全性低,在单线程用。

1,不要对线程安全类的所有方法都进行同步,只对那些会改变共享资源方法的进行同步。

2,如果可变类有两种运行环境,当线程环境和多线程环境则应该为该可变类提供两种版本:线程安全版本和线程不安全版本(没有同步方法和同步块)。在单线程中环境中,使用线程不安全版本以保证性能,在多线程中使用线程安全版本.

java中实现同步的方法有哪两种?

Java的同步可以用synchronized关键字来实现。

sychronized可以同步代码,需要绑定一个对象,如synchronized(obj){}

也可以同步一个方法,是对方法进行线程同步。如public void synchronized methodA(){}

java中同步的几种方法

Java的同步可以用synchronized关键字来实现。

sychronized可以同步代码,需要绑定一个对象,如synchronized(obj){}

也可以同步一个方法,是对方法进行线程同步。如public void synchronized methodA(){}

java中线程同步的几种方法

线程同步主要有以下种方法(示例中是实现计数的功能):

1、同步方法,即使用synchronized关键字修饰方法,例如:

public synchronized void add(int c){...}

2、同步代码块,即有synchronized关键字修饰的语句块,例如:

public void addAndGet(int c){

    synchronized(this){

      count += c;

    }

}

3、使用特殊域变量(volatile)实现线程同步,该方法不能保证绝对的同步。

例如:private volatile int count = 0;

4、使用锁实现线程同步,例如:

private Lock lock = new ReentrantLock();

  public void add(int c) {  

        lock.lock();//上锁  

        try{  

            count += c;  

        }finally{  

            lock.unlock();//解锁  

        }  

    }

5、使用原子变量实现线程同步,在java的util.concurrent.atomic包中提供了创建了原子类型变量的工具类,例如:

private AtomicInteger count= new AtomicInteger(1);

public void add(int c) {

    count.addAndGet(c);

}

6、使用局部变量实现线程同步,如果使用ThreadLocal管理变量,则每一个使用该变量的线程都获得该变量的副本, 副本之间相互独立,这样每一个线程都可以随意修改自己的变量副本,而不会对其他线程产生影响。

ThreadLocal 类的常用方法

new ThreadLocalT() : 创建一个线程本地变量

get() : 返回此线程局部变量的当前线程副本中的值

initialValue() : 返回此线程局部变量的当前线程的"初始值"

set(T value) : 将此线程局部变量的当前线程副本中的值设置为value

示例代码:

private static ThreadLocalInteger count= new ThreadLocalInteger(){

          @Override

          protected Integer initialValue(){ 

              return 1;

             }

     };            

 

public void add(int c){

                count.set(count.get() + c);

    }

7、使用阻塞队列实现,例如LinkedBlockingQueue,具体使用可百度LinkedBlockingQueue的用法或查看java文档。

java如何实现同步的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、java如何实现同步的信息别忘了在本站进行查找喔。