Java--线程的同步与死锁

本文介绍了Java中线程同步的概念,指出在多线程访问同一资源时可能导致资源不同步的问题,并通过synchronized关键字阐述了同步方法的实现。同时,文章探讨了线程死锁的现象,即多个线程相互等待对方释放资源导致的僵局。此外,还讨论了生产者-消费者模型,展示了在缺乏同步处理时可能出现的数据混乱,并提到了等待与唤醒机制在解决这类问题中的应用。
摘要由CSDN通过智能技术生成

线程的同步

当多个线程访问同一资源时,可能会造成资源的不同步,比如:可能由于网络延迟,导致A窗口卖票的时候看到有一张剩余,但其实已经被B窗口给卖出去了,所以此时的资源不同步。由此引出线程的同步处理
在这里插入图片描述
图中锁的功能可以用synchronized关键字来实现,利用此关键字可以定义同步方法同步代码块,使此时操作只允许一个线程执行。
同步会使程序的整体性能降低

class MyThread implements Runnable {
   
	private int ticket = 10 ; //总票数为10张
	public synchronized boolean sale( ) {
   //定义同步方法
		if (this.ticket > 0) {
   
			try {
   
				Thread . sleep(100);//模拟网络延迟
			} catch (InterruptedException e) {
   
				e. printStackTrace();
			}
		 	System.out.println(Thread.currentThread().getName()+"卖票,ticket="+this.ticket --);
			return true ;
	    } else {
   
			System. out . print1n("*****票已经卖光了 ****");
			return false ;
		}
	}
	@override
	public void run() {
   
		while (this.sale()) {
   
			;
		}
	}
}
public class ThreadDemo {
   
	public static void main(String[] args) throws Exception {
   
		MyThread mt = new MyThread() ;
		new Thread(mt, "票贩子A").start();
		new Thread(mt, "票贩子B")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值