线程---同步(synchronized)

Posted pecool

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程---同步(synchronized)相关的知识,希望对你有一定的参考价值。

实现线程同步的一种方式介绍:

思路:

    首先,需要被协调的类,先实现线程,并重写run方法

    然后,在被协调的类中私有化控制器,控制器实例化,由构造器带入。

    其次,由控制器对象具体负责调用。

举例:循环输出A/B/C

main:

public class Test {
	public static void main(String[] args) {
		Controller controller = new Controller();
		new A(controller).start();;
		new B(controller).start();;
		new C(controller).start();;
	}
}

控制器:

public class Controller {

	private int f=0;
	
	public synchronized void printA(){
		if(f==0){
			System.out.println("A");
			f=1;
			notifyAll();
		}
		try {
			wait();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
	
	public synchronized void printB(){
		if(f==1){
			System.out.println("B");
			f=2;
			notifyAll();
		}
		try {
			wait();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
	
	public synchronized void printC(){
		if(f==2){
			System.out.println("C");
			f=0;
			notifyAll();
		}
		try {
			wait();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
	
}

线程A:

public class A extends Thread{

	private Controller controller;
	
	A(Controller controller){
		this.controller = controller;
	}
	
	@Override
	public synchronized void run() {
		for (int i = 0; i < 10; i++) {
			controller.printA();
		}
	}
	
}

  

线程B:

public class B extends Thread{

	private Controller controller;
	
	B(Controller controller){
		this.controller = controller;
	}
	
	@Override
	public synchronized void run() {
		for (int i = 0; i < 10; i++) {
			controller.printB();
		}
	}
}

  

线程C:

public class C extends Thread{

	private Controller controller;
	
	C(Controller controller){
		this.controller = controller;
	}
	
	@Override
	public void run() {
		for (int i = 0; i < 10; i++) {
			controller.printC();
		}
	}
}

 

输出:

A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C

 

以上是关于线程---同步(synchronized)的主要内容,如果未能解决你的问题,请参考以下文章

彻底理解线程同步与同步代码块synchronized

java线程同步-synchronized

java并发 Java线程同步:synchronized锁住的是代码还是对象

线程的同步问题------synchronized关键字的运用

java线程同步: synchronized详解(转)

java多线程——锁机制synchronized(同步方法)