package net.xiaof.onechapter;
/**
* 测试类
* @author XIAO
*/
public class ThreadDemo {
public static void main(String[] args) {
ThreadClass threadInstance = new ThreadClass();
Thread t1 = new Thread(threadInstance);
Thread t2 = new Thread(threadInstance);
Thread t3 = new Thread(threadInstance);
Thread t4 = new Thread(threadInstance);
//开启线程
t1.start();
t2.start();
t3.start();
t4.start();
}
}
/**
* 线程类
* @author XIAO
*/
class ThreadClass implements Runnable {
Object obj = new Object();
private int tickets = 100;
@Override
public void run() {
synchronized (obj) {
while (tickets > 0) {
try {
Thread.sleep(300);//释放执行权和执行资格
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "..." + tickets--);
}
}
}
}
先写下总结,后续更新代码。
【总结】: 同步锁对象:
(1)同步代码块:锁可以是任意对象。
(2)普通同步方法:锁是this对象。
(3)静态同步方法:当前类的实例。如Test.class
【经验】: 对于只有一个同步的任务时,以上方法均可使用;对于多个同步任务,建议使用同步代码块。
同步代码块通用各类情况,所以个人提倡。