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

博主:adminadmin 2022-11-22 07:30:07 55

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

本文目录一览:

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类的实例化顺序是什么样的?Java线程同步的方式有哪些?

引言:java是在1990年初 ,被詹姆斯•高斯林等人开发的一门面向对象的编程语言。起初,java被称为0ak,来经过发展0ak改名为java,与1995年的五月份正式向大家发布。

一、java类的实例化顺序

java的实例化顺序在继承没有的情况

单独一个类的场景下,初始化顺序为依次为静态数据,继承的基类的构造函数,成员变量,被调用的构造函数。

其中静态数据只会初始化一次。(静态数据包括静态代码块和静态变量,每个类的静态数据只会初始化一次)

在继承的情况下

添加两个基类,让继承父亲,父亲继承祖父。

继承的情况就比较复杂了。由继承了基类,还将往上回溯,递归地调用基类的无参构造方法。

在我们的例子中,在初始化静态数据后,会先往上追溯,调用父的默认构造方法,此时再往上追溯到爷爷的默认构造方法。

二、信息技术的不断发展

java也体现了现代社会下信息技术的不断发展,科技水平的不断进步,人们的工作也越来越便利,日常生活也越来越方便,越来越多的工具被人们所开发应用 。科技的发展也要求我们掌握更多的知识,在探索的过程中,我们需要明白更方便的方法使用更便捷的方法来取得成就,我的方法会让过程事半功倍。科技的发展也要求我们掌握越来越多的知识,我们可以通过学习来获得更多的知识,来帮助我们在以后的工作生活,多些技能总是有好处的 。

无论是java还是什么别的东西他都体现了现代社会与信息技术的不断发展,人们在进行进行技术开发时也有了越来越多的方法。程序类的工作也有了更为快捷的方法,这为信息技术的发展也提供了更好的发展方法

JAVA中线程同步方法有哪些

JAVA中线程同步方法一般有以下三种:

1 wait方法:

该方法属于Object的方法,wait方法的作用是使得当前调用wait方法所在部分(代码块)的线程停止执行,并释放当前获得的调用wait所在的代码块的锁,并在其他线程调用notify或者notifyAll方法时恢复到竞争锁状态(一旦获得锁就恢复执行)。

调用wait方法需要注意几点:

第一点:wait被调用的时候必须在拥有锁(即synchronized修饰的)的代码块中。

第二点:恢复执行后,从wait的下一条语句开始执行,因而wait方法总是应当在while循环中调用,以免出现恢复执行后继续执行的条件不满足却继续执行的情况。

第三点:若wait方法参数中带时间,则除了notify和notifyAll被调用能激活处于wait状态(等待状态)的线程进入锁竞争外,在其他线程中interrupt它或者参数时间到了之后,该线程也将被激活到竞争状态。

第四点:wait方法被调用的线程必须获得之前执行到wait时释放掉的锁重新获得才能够恢复执行。

2 notify方法和notifyAll方法:

notify方法通知调用了wait方法,但是尚未激活的一个线程进入线程调度队列(即进入锁竞争),注意不是立即执行。并且具体是哪一个线程不能保证。另外一点就是被唤醒的这个线程一定是在等待wait所释放的锁。

notifyAll方法则唤醒所有调用了wait方法,尚未激活的进程进入竞争队列。

3 synchronized关键字:

第一点:synchronized用来标识一个普通方法时,表示一个线程要执行该方法,必须取得该方法所在的对象的锁。

第二点:synchronized用来标识一个静态方法时,表示一个线程要执行该方法,必须获得该方法所在的类的类锁。

第三点:synchronized修饰一个代码块。类似这样:synchronized(obj) { //code.... }。表示一个线程要执行该代码块,必须获得obj的锁。这样做的目的是减小锁的粒度,保证当不同块所需的锁不冲突时不用对整个对象加锁。利用零长度的byte数组对象做obj非常经济。

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

The End

发布于:2022-11-22,除非注明,否则均为首码项目网原创文章,转载请注明出处。