没有合适的资源?快使用搜索试试~ 我知道了~
Java使用synchronized修饰方法来同步线程的实例演示
5星 · 超过95%的资源 2 下载量 104 浏览量
2020-09-02
04:20:03
上传
评论
收藏 70KB PDF 举报
温馨提示
试读
3页
synchronized下的方法控制多线程程序中的线程同步非常方便,这里就来看一下Java使用synchronized修饰方法来同步线程的实例演示,需要的朋友可以参考下
资源推荐
资源详情
资源评论
Java使用使用synchronized修饰方法来同步线程的实例演示修饰方法来同步线程的实例演示
synchronized下的方法控制多线程程序中的线程同步非常方便,这里就来看一下Java使用synchronized修饰方法
来同步线程的实例演示,需要的朋友可以参考下
Java中可以使用关键字synchronized进行线程同步控制,实现关键资源顺序访问,避免由于多线程并发执行导致的数据不一致
性等问题。synchronized的原理是对象监视器(锁),只有获取到监视器的线程才能继续执行,否则线程会等待获取监视器。
Java中每个对象或者类都有一把锁与之相关联,对于对象来说,监视的是这个对象的实例变量,对于类来说,监视的是类变
量(一个类本身是类Class的对象,所以与类关联的锁也是对象锁)。synchronized关键字使用方式有两种:synchronized方
法和synchronized块。这两种监视区域都和一个引入对象相关联,当到达这个监视区域时,JVM就会锁住这个引用对象,当离
开时会释放这个引用对象上的锁(有异常退出时,JVM会释放锁)。对象锁是JVM内部机制,只需要编写同步方法或者同步块
即可,操作监视区域时JVM会自动获取锁或者释放锁。
示例示例1
先来看第一个示例,在java中,同一个对象的临界区,在同一时间只有一个允许被访问(都是非静态的synchronized方法):
package concurrency;
public class Main8 {
public static void main(String[] args) {
Account account = new Account();
account.setBalance(1000);
Company company = new Company(account);
Thread companyThread = new Thread(company);
Bank bank = new Bank(account);
Thread bankThread = new Thread(bank);
System.out.printf("Account : Initial Balance: %f", account.getBalance());
companyThread.start();
bankThread.start();
try {
//join()方法等待这两个线程运行完成
companyThread.join();
bankThread.join();
System.out.printf("Account : Final Balance: %f", account.getBalance());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
/*帐户*/
class Account{
private double balance;
/*将传入的数据加到余额balance中*/
public synchronized void addAmount(double amount){
double tmp = balance;
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
tmp += amount;
balance = tmp;
}
/*将传入的数据从余额balance中扣除*/
public synchronized void subtractAmount(double amount){
double tmp = balance;
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
tmp -= amount;
balance = tmp;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
}
/*银行*/
资源评论
- 食色也2023-07-26文章结合实例演示,让读者更容易理解如何在实际应用中使用synchronized修饰方法来处理线程同步问题。
- 马李灵珊2023-07-26这篇文章用通俗易懂的语言,解释了Java中使用synchronized修饰方法的必要性和作用。
- 五月Eliy2023-07-26阐述了使用synchronized修饰方法来保证多个线程之间数据一致性的技术细节。
- maXZero2023-07-26通过简洁的实例演示,清晰地展示了Java中如何使用synchronized修饰方法实现线程同步。
- ali-122023-07-26这个文件对于理解Java中使用synchronized修饰方法同步线程非常有帮助。
weixin_38587924
- 粉丝: 4
- 资源: 992
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功