1 同步代码块 自定义锁
class Thread33 implements Runnable{
int a = 100;
Object obj = new Object();
@Override
public void run() {
while(a > 0){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (obj) {
if(a > 0){
Thread thread = Thread.currentThread();
System.out.println(thread.getName() +" "+ a);
a--;
}
}
}
}
}
public class Thread3 {
public static void main(String[] args) {
Thread33 thread3 = new Thread33();
Thread thread1 = new Thread(thread3);
thread1.start();
Thread thread2 = new Thread(thread3);
thread2.start();
Thread thread4 = new Thread(thread3);
thread4.start();
}
}
2 同步函数 同步函数使用this锁
class Thread44 implements Runnable{
int a = 100;
Object obj = new Object();
@Override
public void run() {
while(a > 0){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
this.jian(a);
}
}
public synchronized void jian(int a){
if(a > 0){
a--;
}
}
}
public class Thread4 {
public static void main(String[] args) {
Thread33 thread3 = new Thread33();
Thread thread1 = new Thread(thread3);
thread1.start();
Thread thread2 = new Thread(thread3);
thread2.start();
Thread thread4 = new Thread(thread3);
thread4.start();
}
}
3 静态同步函数 方法上加上static关键字 使用synchronized 关键字修饰 或者使用类.class文件