java线程中的synchronized关键字和sleep()方法

java线程中的synchronized关键字sleep()方法

直接po代码和截图

源码点这里

java线程中的synchronized关键字和sleep()方法

Service类

package com.demo.thread5;

public class Service {
	
	public void a() {
		System.out.println(Thread.currentThread().getName() + ",我是普通方法a()开始部分$$$$$$$$$");
		b(); //调用同步方法b()
		System.out.println(Thread.currentThread().getName() + ",b()函数调用完成了,我是方法a()结束部分......");
	}

	public synchronized void b() {
		System.out.println(Thread.currentThread().getName() + ",我是同步方法b(),我要睡眠一会儿###########");
		try {
			Thread.sleep(3000); //睡眠3秒钟
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println(Thread.currentThread().getName() + ",我是同步方法b(),我睡眠完了,我是同步方法b()结尾部分-----");	
	}
}

A类

package com.demo.thread5;

public class A implements Runnable{
	
	Service service;

	public A(Service service) {
		this.service = service;
	}

	@Override
	public void run() {
		service.a();
	}
	

}

B类

package com.demo.thread5;

public class B implements Runnable{
	
	Service service;

	public B(Service service) {
		this.service = service;
	}

	@Override
	public void run() {
		service.a();
	}
	

}

C类

package com.demo.thread5;

public class C implements Runnable{
	
	Service service;

	public C(Service service) {
		this.service = service;
	}

	@Override
	public void run() {
		service.a();
	}
	

}

Test类

package com.demo.thread5;

public class Test {

	public static void main(String[] args) {
		Service service = new Service();

		//3个线程同时操作同一个对象service
		A a = new A(service);
		B b = new B(service);
		C c = new C(service);

		//给3个线程分别取个名字
		Thread thread1 = new Thread(a, "线程1");
		Thread thread2 = new Thread(b, "线程2");
		Thread thread3 = new Thread(c, "线程3");
		
		//启动线程
		thread1.start();
		thread2.start();
		thread3.start();
	}

}

运行结果如下:可以多运行几次

运行结果,情况1

java线程中的synchronized关键字和sleep()方法

运行结果,情况2

java线程中的synchronized关键字和sleep()方法

运行结果,情况3

java线程中的synchronized关键字和sleep()方法