this.flag = flag;
}
@Override
public void run(){
if (flag) {
synchronized(MyLock.lockA) {
System.out.println("锁住A,我要进B");
synchronized(MyLock.lockB) {
System.out.println("MyLock.lockB");
}
}
} else {
synchronized(MyLock.lockB) {
System.out.println("锁住B,我要进A");
synchronized(MyLock.lockA) {
System.out.println("MyLock.lockA");
}
}
}
}
}
public class ThreadDemo2 {
public static void main(String[] args) {
new Thread(new DoSomething(true)).start();
new Thread(new DoSomething(false)).start();
}
}
class MyLock {
static final Object lockA = new Object();
static final Object lockB = new Object();
}
class DoSomething implements Runnable {
private boolean flag;
public DoSomething(boolean flag) {
this.flag = flag;
}
@Override
public void run(){
if (flag) {
synchronized(MyLock.lockA) {
System.out.println("锁住A,我要进B");
synchronized(MyLock.lockB) {
System.out.println("MyLock.lockB");
}
}
} else {
synchronized(MyLock.lockB) {
System.out.println("锁住B,我要进A");
synchronized(MyLock.lockA) {
System.out.println("MyLock.lockA");
}
}
}
}
}
public class ThreadDemo2 {
public static void main(String[] args) {
new Thread(new DoSomething(true)).start();
new Thread(new DoSomething(false)).start();
}
}
4:生产者消费者
生产者不断生产,消费者不断消费。
[java]
class Person {
private String name;
private char sex;
private boolean flag;
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void setSex(char sex) {
this.sex = sex;
}
public char getSex() {
return this.sex;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
public boolean getFlag() {
return this.flag;
}
}
/* 生产者 */
class Producer implements Runnable {
private Person per;
public Producer(Person per) {
this.per = per;
}
public void run() { // 生产者不断生产内容
int i = 0;
while(true) {
synchronized(per) {
if(per.getFlag()) { // 如果为真就等待
try {
per.wait(); // 等待线程
} catch (Exception e) {
}
} else {
if(i == 0) {
per.setName("西门庆");
per.setSex('男');
} else {
per.setName("潘金莲");
per.setSex('女');
}
System.out.println(Thread.currentThread().getName() + "号线程开始生产:" + per.getName() + " - " + per.getSex());
i = (i+1)%2;
per.setFlag(true);
per.notify(); // 唤醒等待线程
}
}
}
}
}
/* 消费者 */
class Consumer implements Runnable {
private Person per;
public Consumer(Person per) {
this.per = per;
}
public void run() { // 消费者不断取走内容
while(true) {
synchronized(per) {
if(!per