同步函数以this为锁

/*
	同步函数用的是this锁
	
	函数需要被对象调用。那么函数都有一个所属对象调用,就是this
	所以同步函数使用的锁是this

	
	通过该程序进行验证

	使用两个线程来卖票

	一个线程在同步代码块中
	一个线程在同步函数中
	都在执行卖票操作


*/

class Ticket implements	Runnable
{
	private int tick = 1000;
	
	//Object obj = new Object();

	boolean flag = true;

	public void run()
	{
		if(flag)//第一个进入的线程实行下面代码
		{
				while(true)
				{
					//synchronized(obj)//由于同步函数的是以this对象为锁的 此处如果使用obj对象作为锁
										//则不能实现同步 输出的数据会出现错误 程序的安全性不能得到保证
					synchronized(this)//和下面的show函数使用同样的锁 可以保证同步
					{
						if(tick>0)
						{
							try{Thread.sleep(40);}catch(Exception e){}
							System.out.println(Thread.currentThread().getName() +" .....code..."+ tick--);

						}
					}
				}
		}//第二个进入的代码实行下面代码
		else
			while(true)
				show();//this.show();
	
	}
	public synchronized void show()//同步函数 以this为锁
	{
		if(tick>0)
		{
			try{Thread.sleep(40);}catch(Exception e){}
			System.out.println(Thread.currentThread().getName() +" .....show..."+ tick--);
		}		
	}

}


class ThisLockDemo
{
	public static void main(String []args)
	{
		Ticket t = new Ticket();
		Thread t1 = new Thread(t);
		Thread t2 = new Thread(t);
	
		t1.start();//开启第一个线程  但不一定马上执行
		
		t.flag = false;//改变标志
		try{Thread.sleep(40);}catch(Exception e){}//让主线程睡眠40毫秒  保证第一个线程先开始运行 且标志位改变

		t2.start();	
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Vue中,异步函数可以通过使用Promise对象、async/await等方式来实现同步执行的效果。Promise是一种用于处理异步操作的对象,它可以将异步函数的执行结果以同步的方式返回。具体来说,可以按照以下步骤实现异步函数同步执行的效果: 1. 使用Promise对象封装异步函数,将异步操作包裹在Promise的回调函数中。 2. 在封装的异步函数内部,通过resolve来返回异步操作的结果。 3. 在调用异步函数的地方,使用await关键字来等待异步函数执行完毕并获取结果。 4. 使用async关键字将包含异步函数调用的父函数标记为异步函数。 例如,假设我们有一个Vue组件,其中包含了两个异步函数testOne和testTwo。我们可以通过使用Promise和async/await来实现这两个函数同步执行。 ``` methods: { testOne() { return new Promise((resolve, reject) => { setTimeout(function () { resolve('我是第一个函数的返回值'); }, 500); }); }, async testTwo(data) { console.log(data); console.log('得到data进行下一步的操作'); }, async resultFn() { let data = await this.testOne(); await this.testTwo(data); } } ``` 在上述代码中,testOne函数被封装成了返回Promise对象的形式,通过resolve将异步操作的结果返回。而testTwo函数使用了async关键字,表示它是一个异步函数。在resultFn函数中,我们使用了await关键字来等待testOne函数执行完毕并获取结果,然后再将结果传递给testTwo函数进行下一步的操作。这样就实现了异步函数同步执行效果。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值