Java线程的同步

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。

线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。

单线程程序:即,若有多个任务只能依次执行。当上一个任务执行结束后,下一个任务开始执行。

多线程程序:即,若有多个任务可以同时执行。

在多线程的运行过程中,由于不同线程对同一个数据对象的访问时容易对数据造成破坏。故,应该通过在某个时刻只允许一个线程能够独立性 访问共享数据的机制,就可以解决线程的安全问题。具体做法是:当一个线程进入共享数据操作代码时,其他想进入共享数据操作的代码就一直处于等待状态,在具有独占性权限的代码操作完成后,才允许另外一个线程进入贡献数据操作代码,其他的线程继续等待,这个过程称为线程的同步。

实现线程的同步的方法有两种:1、使用关键字synchronized修饰要同步的方法;2、将要同步的代码放入synchronized块中

使用关键字synchronized修饰要同步的方法

public class Main {
	public static void main(String[] args) {
		Ticket ticket = new Ticket();
		new Thread(ticket, "窗口1").start();
		new Thread(ticket, "窗口2").start();
		new Thread(ticket, "窗口3").start();
	}
}

// 使用关键字synchronized修饰要同步的方法
class Ticket implements Runnable {
	int ticket = 10;

	public synchronized void run() {
		while (true) {
			if (ticket > 0) {
				try {
					Thread.sleep(100);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				System.out.println(Thread.currentThread().getName() + "正在售票:"
						+ ticket--);
			}
		}
	}
}

 

将要同步的代码放入synchronized块中

public class Main {
	public static void main(String[] args) {
		Ticket ticket = new Ticket();
		new Thread(ticket, "窗口1").start();
		new Thread(ticket, "窗口2").start();
		new Thread(ticket, "窗口3").start();
	}
}


// 将要同步的代码放入synchronized块中
class Ticket implements Runnable {
	int ticket = 10;

	public void run() {
		synchronized (this) {
			while (true) {
				if (ticket > 0) {
					try {
						Thread.sleep(100);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					System.out.println(Thread.currentThread().getName()
							+ "正在售票:" + ticket--);
				}
			}
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值