同步的由来
当两个或两个以上的线程需要共享资源,必须使用某种方法来确定资源在某一时刻仅被一个线程占用,达到此目的的过程叫做同步。(synchronized)
同步的实现
方法级同步(method-level synchronized)
synchronized void method( ) {
//同步的方法
}
对象级同步( block-level synchronized )
synchronized ( object ) {
//要同步的语句
}
应用场景举例——多线程购票(同步方法)
package com.foot.lesson03;
public class TestSynchronized {
public static void main(String[] args) {
Tickets ticket = new Tickets();
BuyerThread bta = new BuyerThread(ticket);
bta.setName("售票点A");
BuyerThread btb = new BuyerThread(ticket);
btb.setName("售票点B");
bta.start();
btb.start();
}
}
class Tickets {
private int count;
public Tickets() {
this.count = 10;
}
// 购票操作
public synchronized String sell(String name) {
if (this.count > 0) {
count--;
return name + "购票成功,剩余:" + count;
}
return "票已经售完!";
}
}
class BuyerThread extends Thread {
private Tickets ticket = null;
public BuyerThread(Tickets ticket) {
this.ticket = ticket;
}
@Override
public void run() {