java线程实现同步的方法有哪些_线程同步的方式有哪些?线程如何实现同步?...

在线程出现安全问题时我们就要用到线程同步,那如何实现线程同步大家知道吗?它又有几种实现方法呢?一起来看看吧。

一、什么是线程同步?

多个线程在访问同一个数据时,会出现可能线程安全问题,线程同步就是用来解决这些问的题的。

二、线程同步有哪些实现方法?

1、同步代码块:

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

2、同步方法:

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

意思就是使用 synchronized 来修饰某个方法,则该方法就叫做同步方法。对于同步方法来说,不需要显示指定同步监视器,同步方法的同步监视器是

this 也就是该对象的本身通过使用同步方法,能够快速的将某类变成线程安全的类,会具有以下特征:

a这个类的对象可以被多个线程安全的访问。

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

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

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

三、如何实现线程同步?

示例:synchronized(object)

{}package com.xhj.thread;

/**

* 线程同步的运用

*

* @author XIEHEJUN

*

*/

public class SynchronizedThread

{

class Bank

{

private int account = 100;

public int getAccount()

{

return account;

}

/**

* 用同步方法实现

*

* @param money

*/

public synchronized void save(int money)

{

account += money;

}

/**

* 用同步代码块实现

*

* @param money

*/

public void save1(int money)

{

synchronized(this)

{

account += money;

}

}

}class NewThread implements Runnable {

private Bank bank;

public NewThread(Bank bank) {

this.bank = bank;

}

@Override

public void run() {

for (int i = 0; i 

// bank.save1(10);

bank.save(10);

System.out.println(i + "账户余额为:" + bank.getAccount());

}

}

}

/**

* 建立线程,调用内部类

*/

public void useThread() {

Bank bank = new Bank();

NewThread new_thread = new NewThread(bank);

System.out.println("线程1");

Thread thread1 = new Thread(new_thread);

thread1.start();

System.out.println("线程2");

Thread thread2 = new Thread(new_thread);

thread2.start();

}

public static void main(String[] args) {

SynchronizedThread st = new SynchronizedThread();

st.useThread();

}

}

注:同步是一种高开销的操作,因此应该尽量减少同步的内容。通常没有必要同步整个方法,使用synchronized代码块同步关键代码即可。

以上就是本篇文章的全部内容了,如果你想要深入的学习java及了解一些java常见问答知识,就快来关注我们的网站吧。

推荐阅读:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值