class Producer implements Runnable {
Q q;// 定义队列
public Producer(Q q) {
this.q = q;
}
public void run() {
int i = 0;
while (true) {
synchronized (q) {
if (q.bFull)
try {q.wait();} catch (Exception e) {}
if (i == 0) {
q.name = "zhangsan";
try {Thread.sleep(1);} catch (Exception e) {}
q.sex = "nan";
}
else {
q.name = "lisi";
q.sex = "nv";
}
i = (i + 1) % 2;
q.bFull = true;
q.notify();
}
}
}
}
class Consumer implements Runnable {
Q q;
public Consumer(Q q) {
this.q = q;
}
public void run() {
while (true) {
synchronized (q) {
if (!q.bFull)
try {q.wait();} catch (Exception e) {}
System.out.print(q.name);
System.out.println(":" + q.sex);
q.bFull = false;
q.notify();
}
}
}
}
class Q {
String name = "unknown";
String sex = "unknown";
Boolean bFull = false;
}
public class test {
public static void main(String[] args) {
Q q = new Q();
new Thread(new Producer(q)).start();
new Thread(new Consumer(q)).start();
}
}
可以简写为:简单且具有面向对象的思想
class Producer implements Runnable {
Q q;// 定义队列
public Producer(Q q) {
this.q = q;
}
public void run() {
int i = 0;
while (true) {
if (i == 0)
q.set("name1", "M");
else
q.set("name2", "F");
i = (i + 1) % 2;
}
}
}
class Consumer implements Runnable {
Q q;
public Consumer(Q q) {
this.q = q;
}
public void run() {
while (true) {
q.get();
}
}
}
class Q {
private String name = "unknown";
private String sex = "unknown";
Boolean bFull = false;
public synchronized void set(String name, String sex) {
if (bFull)
try {wait();} catch (Exception e) {}
this.name = name;
try {
Thread.sleep(1);
} catch (Exception e) {
}
this.sex = sex;
bFull = true;
notify();
}
public synchronized void get() {
if (!bFull)
try {wait();} catch (Exception e) {}
System.out.print(name);
System.out.println(":" + sex);
bFull = false;
notify();
}
}
public class test {
public static void main(String[] args) {
Q q = new Q();
new Thread(new Producer(q)).start();
new Thread(new Consumer(q)).start();
}
}
控制线程关闭,不能采用stop()/suspendI()方法,会产生死锁问题
public class test {
public static void main(String[] args) {
ThreadTest t = new ThreadTest();
new Thread(t).start();
for (int i = 0; i < 10; i++) {
if (i == 5) {
t.stopM();
}
System.out.println("Main() is running");
}
}
}
class ThreadTest implements Runnable {
private Boolean bStop = false;
public void stopM() {
bStop = true;
}
public void run() {
while (!bStop) { //将run的代码块放到判断条件语句中
System.out.println(Thread.currentThread().getName() + "is running");
}
}
}