Java 同步方法

Java:同步方法

接着上篇博客多线程,继续分析解决 线程同步 的两个方法:同步块同步方法 中的 同步方法。用 synchronized 关键字给针对共享资源进行操作的方法加锁。一个方法使用 synchronized 关键字修饰后,当一个线程A使用这个方法时,其他线程想使用这个方法时就必须等待,直到线程A使用完该方法。

注意:
静态同步方法的锁是给该类的 类对象 加锁。
非静态同步方法其实就是给 this对象 进行加锁。

class SellTicket implements Runnable {
	private int tickets = 10;

	public void run() {

		while (true) {
			if (tickets > 0)
				sell();
			else
				return;
		}

	}

	public synchronized void sell() {
		if (tickets > 0) {
			System.out.println(Thread.currentThread().getName() + "卖出第" + tickets + "张票");
			tickets--;
			try {
				Thread.sleep(500);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}

		}
	}
}

public class TicketTest {
	public static void main(String args[]) {
		SellTicket t = new SellTicket();

		new Thread(t, "窗口1").start();
		new Thread(t, "窗口2").start();
		new Thread(t, "窗口3").start();

		System.out.println("主线程结束");

	}
}

观察结果,发现三个窗口随机售票,并且不会重复出售同一张票。(如果结果不明显,可以将 tickets 的值设置大一点)

希望可以帮助大家。

链接:
多线程 https://blog.csdn.net/qq_39004632/article/details/90241530
同步块 https://blog.csdn.net/qq_39004632/article/details/90342775

你可能感兴趣的:(Java)