java多线程同步问题小demo

原创
2021/02/03 11:52
阅读数 137

线程同步问题,一般解决是添加同步锁,可以使用synchronized关键字,可以修饰方法、代码块

代码块:

// 1.代码块
synchronized(同步对象){
  //业务逻辑 
}

// 2.方法
public synchronized void doDemo(){
  //业务逻辑 
}

下面看一个出票问题栗子

出票线程:

package com.pimee.sync;

public class TicketThread implements Runnable {

	private int ticket = 10; // 票数

	public void run() {
		while (true) {
			synchronized (this) { // 要对当前对象加锁
				if (ticket > 0) { // 还有票
					System.out.println("余票:ticket = " + ticket--);
				} else {
					break;
				}
			}
		}
	}
}

测试类:

package com.pimee.sync;

public class TicketTest {

	public static void main(String[] args) {
		TicketThread ticket = new TicketThread();
		for (int i = 0; i < 10; i++) {
			Thread t = new Thread(ticket);
			t.start();
		}
	}
}

测试结果:

 

展开阅读全文
加载中

作者的其它热门文章

打赏
0
0 收藏
分享
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部