java基础——同步方法
Posted zsbenn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java基础——同步方法相关的知识,希望对你有一定的参考价值。
实现Runnable的同步方法
package synchronization.method; /* 用同步方法解决实现Runnable的安全问题 @author zsben @create 2020-01-03 13:48 */ class WindowRun implements Runnable{ private int ticket = 100; @Override public void run() { while (true) { show(); } } private synchronized void show(){//用的那把锁就是this if (ticket > 0) { System.out.println(Thread.currentThread().getName() + ": " + ticket); ticket--; } } } public class WindowRunnableTest { public static void main(String[] args) { WindowRun windowRun = new WindowRun(); Thread t1 = new Thread(windowRun); Thread t2 = new Thread(windowRun); Thread t3 = new Thread(windowRun); t1.start(); t2.start(); t3.start(); } }
继承Thread的同步方法
package synchronization.method; /* 创建三个窗口买票,总票数为100张 同步方法解决总结: 1.同步方法仍然需要同步锁,只是不需要显示声明 2. 非静态(实现Runnable)的同步方法:同步监视器是this 静态(继承Thread类)的同步方法:同步监视器是当前类本身 @author zsben @create 2020-01-03 12:41 */ class Window extends Thread{ private static int ticket = 100; @Override public void run() { while(true) { show(); } } private static synchronized void show(){//同步监视器就是Window.class try { sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } if (ticket > 0) { System.out.println(Thread.currentThread().getName() + ": " + ticket); ticket--; } } } public class WindowThreadTest { public static void main(String[] args) { Window t1 = new Window(); Window t2 = new Window(); Window t3 = new Window(); t1.setName("窗口1"); t2.setName("窗口2"); t3.setName("窗口3"); t1.start(); t2.start(); t3.start(); } }
以上是关于java基础——同步方法的主要内容,如果未能解决你的问题,请参考以下文章