这是我的代码
package org.com.JframeDemo;public class ControlClass {
private int readCount; // 需要读的读者
private int writeCount; // 需要写的写者
private boolean cRead; // 读者的状态
private boolean cWrite; // 学者的状态
public static int a; public ControlClass() { // 初始化数据
readCount = 0;
writeCount = 0;
cRead = false;
cWrite = false;
} public static void sleeptime() { // 睡眠时间
int sleepTime = (int) (Math.random());
try {
Thread.sleep(sleepTime * 10000);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
} public synchronized void startRead() { // 读者开始读取
if (cRead == false) {
while (writeCount > 0) { // 写者优先
try {
a=0;
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
System.out.println(e.toString());
e.printStackTrace();
}
}
}
readCount++;
if (readCount == 1) {
cRead = true; // 返回有读者正在读
}
} public synchronized void endRead() { // 读者结束读取
--readCount;
if (readCount == 0) {
cRead = false;
}
notifyAll(); // 释放空间 } public synchronized void startWrite() { // 写者开始写
writeCount++;
if (cRead == true || cWrite == true) {
a=1;
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
System.out.println(e.toString());
e.printStackTrace();
}
}
cWrite = true;
} public synchronized void endWrite() {
writeCount++;
cWrite = false;
notifyAll();
}
}
package org.com.JframeDemo;import java.text.SimpleDateFormat;
import java.util.Date;import javax.swing.JTextArea;public class Reader implements Runnable {
private ControlClass controlClass;
private JTextArea t;
private int reader;
public static String str = "",time1,time2; public Reader(int reader, JTextArea t, ControlClass controlClass) {
this.reader = reader;
this.t = t;
this.controlClass = controlClass;
} @Override
public void run() {
// TODO Auto-generated method stub
while (true) {
    final SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss"); 
    time1 = format.format(new Date());
str = time1+"读者" + reader + "准备读取" + '\n';
t.append(str);
controlClass.startRead(); // 读者开始工作
str = "读者" + reader + "正在读取" + '\n';
t.append(str);
ControlClass.sleeptime(); // 读者处于工作阶段
controlClass.endRead(); // 读者结束读取
str = "读者" + reader + "完成读取" + '\n';
t.append(str);
}
}
}
package org.com.JframeDemo;import java.text.SimpleDateFormat;
import java.util.Date;import javax.swing.JTextArea;public class Writer implements Runnable {
private ControlClass controlClass;
private int writer;
private JTextArea t;
public static String str,time1,time2; public Writer(int writer, JTextArea t, ControlClass controlClass) {
this.writer = writer;
this.t = t;
this.controlClass = controlClass; } @Override
public void run() {
// TODO Auto-generated method stub
while (true) {
final SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
time1 = format.format(new Date());
str = time1+"写者" + writer + "准备写取" + '\n';
t.append(str);
controlClass.startWrite();
str = "写者" + writer + "正在写取" + '\n';
t.append(str);
ControlClass.sleeptime();
controlClass.endRead();
str = "写者" + writer + "完成写取" + '\n';
t.append(str);
}
}
}
package org.com.JframeDemo;import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JToolBar;public class ThreadTest extends JFrame {
JButton start, end;
JPanel[] LL;
JTextArea[] T;// 存放信息
JScrollPane[] S;
public ThreadTest() {
setTitle("读者写者问题模拟");
setSize(600, 650);
JPanel panel = new JPanel();
JPanel p2 = new JPanel();
JToolBar TB = new JToolBar();
Container ct = this.getContentPane();

LL = new JPanel[7];
T = new JTextArea[7];
S = new JScrollPane[7];
for (int i = 1; i <= 6; i++) { LL[i] = new JPanel();
T[i] = new JTextArea(); T[i].setPreferredSize(new Dimension(550, 600));
S[i] = new JScrollPane();
S[i].setPreferredSize(new Dimension(400, 150));
LL[i].setPreferredSize(new Dimension(650, 70));
S[i].add(T[i]);
S[i].setViewportView(T[i]);
LL[i].add(S[i]);
}
// 读者线程
start = new JButton("开始");
start.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
    ControlClass controlClass=new ControlClass();
Reader r1 = new Reader(1, T[1], controlClass);
Reader r2 = new Reader(2, T[2], controlClass);
Reader r3 = new Reader(3, T[3], controlClass);
Reader r4 = new Reader(4, T[4], controlClass);
// 写者线程
Writer w1 = new Writer(1, T[5], controlClass);
Writer w2 = new Writer(2, T[6], controlClass);
Thread demo01 = new Thread(r1);
demo01.start();
Thread demo02 = new Thread(r2);
demo02.start();
Thread demo03 = new Thread(r3);
demo03.start();
Thread demo05 = new Thread(w1);
demo05.start();
Thread demo04 = new Thread(r4);
demo04.start();
Thread demo06 = new Thread(w2);
demo06.start();
}
}); end = new JButton("结束");
end.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
System.exit(0);
}
});
TB.add(start);
TB.add(end);
add(TB, BorderLayout.NORTH);
ct.add(panel, BorderLayout.SOUTH);
p2.add(LL[1]);
p2.add(LL[2]);
p2.add(LL[3]);
p2.add(LL[4]);
p2.add(LL[5]);
p2.add(LL[6]);
ct.add(p2, BorderLayout.CENTER); } public static void main(String[] args) {
ThreadTest threadTests = new ThreadTest();
threadTests.setVisible(true);
threadTests.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
我明明已经调用了睡眠函数,可是我调用系统时间的时候,且发现我的线程根本没有睡眠,不知道是怎么回事?