方法1、
package RT2;
import java.util.concurrent.locks.ReentrantLock;
public class PersonSync extends Thread{
private final ReentrantLock lock = new ReentrantLock();
static int j;
// 这里是通过synchronized 方法控制多线程 (public synchronized static void quqian(){ )
public void quqian(){ // 是对类对象加锁
synchronized(PersonSync.class){
for (int i = 0; i < 100; i++) {
j++;
System.out.println(Thread.currentThread().getName()+":"+j);
}
}
}
// 这里是lock 接口的用法
public void quloc(){
lock.lock(); // block until condition holds
try {
for (int i = 0; i < 100; i++) {
j++;
System.out.println(Thread.currentThread().getName()+":"+j);
}
} finally {
lock.unlock();
}
}
public void run(){
// quqian();
quloc();
}
public static void main(String[] args) {
PersonSync p1=new PersonSync();
p1.start();
PersonSync p2=new PersonSync();
p2.start();
}
}
方法2、
package RT2;
public class Machine {
int j=0;
public synchronized void quqian(){
for (int i = 0; i < 100; i++) {
j++;
System.out.println(Thread.currentThread().getName()+":"+j);
}
}
}
package RT2;
public class Person extends Thread{
public Machine machine;
public Person(Machine machine){
this.machine=machine;
}
public void run(){
machine.quqian();
}
public static void main(String[] args) {
Machine machine=new Machine();
Person p1=new Person(machine);
p1.start();
Person p2=new Person(machine);
p2.start();
}
}