同步方法的使用

同步方法概述:与同步代码块对应,java的多线程还提供了同步方法,同步方法就是使用 synchronized关键字来修饰某个方法。

同步方法的代码格式如下:

  访问修饰符  synchronized 返回类型 方法名(方法参数){  //同步方法体  }

银行取钱程序为例,代码如下:

一、创建一个账户类

package max.ji;

public class yinghang {
     private String no; //卡号
     private double blance;//卡里余额
	public String getNo() {
		return no;
	}
	public yinghang(String no, double blance) {
		super();
		this.no = no;
		this.blance = blance;
	}
	//同步方法
	public synchronized void darw(double dra) {
		//吐钱
		if (this.getBlance()>dra) {
			System.out.println(Thread.currentThread().getName()+"取钱成功:"+dra+"元");
	    this.blance-=dra;
			System.out.println("账户:"+this.getNo()+"还剩:"+this.blance+"元");
		}else {
			System.out.println(Thread.currentThread().getName()+"取钱失败,卡内余额不足");
		}
	}
	public void setNo(String no) {
		this.no = no;
	}
	public double getBlance() {
		return blance;
	}
	public void setBlance(double blance) {
		this.blance = blance;
	}
}

二、创建同步方法类

package max.ji;

public class T1 extends Thread{
    private yinghang acYinghang;
    private double dra;
	public T1(String name,yinghang acYinghang, double dra) {
		super(name);
		this.acYinghang = acYinghang;
		this.dra = dra;
	}
public void run() {
		//直接调用yinghang对象的darw()方法来取钱
		//同步方法的同步监听器是this,this代表调用draw()方法的对象
		//也就是说,线程加入draw方法之前,必须对account的对象加锁
		acYinghang.darw(dra);
	}
	//线程同步问题
	public static void main(String[] args) {
		yinghang account=new yinghang("201903300076", 1200);  //赋值卡号和卡里的金额
		//两个线程在一个账户取钱
		new T1("张三", account, 600).start();//启动线程
		new T1("李四", account, 650).start();//启动线程
	}
}

运行效果如下:

 

在 Vuex 中,可以使用同步的方式来修改状态(state)。下面是一个简单的示例,演示如何在 Vuex 中定义和使用同步的 mutations 方法: 1. 在 `store` 目录下的 `index.js` 文件中,定义一个 `state` 对象和一个 `mutations` 对象。示例如下: ```javascript const store = new Vuex.Store({ state: { count: 0 }, mutations: { increment(state) { state.count++ }, decrement(state) { state.count-- } } }) export default store ``` 2. 在组件中,可以通过 `this.$store.commit` 方法来调用 mutations 中定义的方法,从而修改状态。示例如下: ```javascript // 引入 Vue 和 Vuex import { mapState } from 'vuex' export default { computed: { ...mapState(['count']) }, methods: { increment() { this.$store.commit('increment') }, decrement() { this.$store.commit('decrement') } } } ``` 在上述示例中,`mapState` 是一个辅助函数,可以将 Vuex 的状态映射到组件的计算属性中,这样就可以直接在模板中使用状态了。 在方法中,我们通过 `this.$store.commit` 方法来触发 mutations 中对应的方法,从而修改状态。`commit` 方法的第一个参数是 mutations 中的方法名,后面可以传递额外的参数(如果有)。 这样,当在组件中调用 `increment` 或 `decrement` 方法时,就会触发对应的 mutations 方法,从而修改 state 中的 count 值。 这就是在 Vuex 中使用同步方法来修改状态的基本步骤。通过定义 mutations 并在组件中调用 commit 方法,可以实现同步的状态更新。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值