以下程序updateGUIFlag是标志updateTextGui线程的启动与停止,0表示停止,1表示运行。
同理,另一个也是。
我在线程updateTextGui运行的时候要停止histomgramMatchThread。
在线程histomgramMatchThread运行的时候,要停止updateTextGui线程
那么总有问题: updateTextGui调用这个方法时,执行至suspend(),剩下的就不执行了。
反之histomgramMatchThread调用这个方法时,执行至,剩下的也不执行了。
反正只能成一家之美。
怎么办》》》》》》》》 public void setAllThreadFlag(int updateGUIFlag, int histogramFlag){
//设置更新界面前景点和对象数线程的挂起与运行
if(updateGUIFlag == 0){
System.out.println("更新界面被 挂起");
if(updateGuiRunningFlag == true){
updateTextGui.suspend();
updateGuiRunningFlag = false;
}
}else{
System.out.println("更新界面继续");
if(updateGuiRunningFlag == false){
updateTextGui.resume();
updateGuiRunningFlag = true;
System.out.println("线程被继续------------");
}
}
//设置直方图匹配程序的挂起与运行
if(histogramFlag == 0){
System.out.println("直方图匹配程序被挂起");
if(histogramRunningFlag == true){
histomgramMatchThread.suspend();
histogramRunningFlag = false;
}
}else{
System.out.println("直方图匹配程序被继续");
if(histogramRunningFlag == false){
histomgramMatchThread.resume();
histogramRunningFlag = true;
}
}
}
同理,另一个也是。
我在线程updateTextGui运行的时候要停止histomgramMatchThread。
在线程histomgramMatchThread运行的时候,要停止updateTextGui线程
那么总有问题: updateTextGui调用这个方法时,执行至suspend(),剩下的就不执行了。
反之histomgramMatchThread调用这个方法时,执行至,剩下的也不执行了。
反正只能成一家之美。
怎么办》》》》》》》》 public void setAllThreadFlag(int updateGUIFlag, int histogramFlag){
//设置更新界面前景点和对象数线程的挂起与运行
if(updateGUIFlag == 0){
System.out.println("更新界面被 挂起");
if(updateGuiRunningFlag == true){
updateTextGui.suspend();
updateGuiRunningFlag = false;
}
}else{
System.out.println("更新界面继续");
if(updateGuiRunningFlag == false){
updateTextGui.resume();
updateGuiRunningFlag = true;
System.out.println("线程被继续------------");
}
}
//设置直方图匹配程序的挂起与运行
if(histogramFlag == 0){
System.out.println("直方图匹配程序被挂起");
if(histogramRunningFlag == true){
histomgramMatchThread.suspend();
histogramRunningFlag = false;
}
}else{
System.out.println("直方图匹配程序被继续");
if(histogramRunningFlag == false){
histomgramMatchThread.resume();
histogramRunningFlag = true;
}
}
}
解决方案 »
- 我在my eclipse中打jar包时,打成了但是却没有图片,我想问一下怎么在上面打包,怎么把图片也带上!!!
- 高分求助,java中如何从一个文件中实时的读取数据,并画出相应的曲线
- Spring反转控制 就是对 多态 的封装
- 局域内的两台机子,怎么样通过应用程序来实现传送文件呢?
- 求各位高手帮帮小女子吧,对于类库怎样填加
- package 无法调用
- 问一下关于函数重载的问题
- 请教高手:一道scjp考试问题(关于垃圾收集)
- 请问如何判断某时间段内是否包括另一时间段?
- 如何让jtable中的列不能拖动
- 程序都运行结束了,main方法退出了,还是不执行finalizer方法,怪了。
- java基础问题!!!!!!
或者你应该使用notify()来唤醒线程
public static void main(String[] args) {
Queue q=new Queue ();//new出一个q:后面的两个线程都是用的同一个q,保证一个put一个get
Producer p=new Producer (q);//让new出的p去往q里面put
Customer c=new Customer (q);//让new出的c从q中get
p.start();//p和q开始的顺序并不报错
c.start();
}
}
class Producer extends Thread
{
Queue q;
public Producer(Queue q) {
this.q=q;//给成员变量赋值,再一调运q的put方法
}
@Override
public void run() {
for (int i = 0; i < 10; i++) {
q.put(i);//此处只是让q去put 10次
System.out.println("Producer put "+i);//并且输出本次放的是第几杯
}
}
}
class Customer extends Thread
{
Queue q;
public Customer(Queue q) {
this.q=q;//给成员变量赋值,再一调运q的get方法
}
@Override
public void run() {
while (true) {//死循环:只要q里面有,就去get
//get方法有返回值,返回值就是producer所put的数量
//此处也不需要去考虑是第几杯
//在Queue中的value解决可这一问题:
//put中的I赋给value,get方法有返回值就value的值
System.out.println("Customer get "+q.get());
//如果循环完了,就跳出循环,否则线程不会自己结束
if (q.value==9) {
break;
}
}
}
}
class Queue
{
int value;
boolean bFull=false;
public synchronized void put (int i)//在producer中的put方法中就是将其I传进来
{
if (!bFull) {//条件为真(如果没满,就倒水)
value=i;//给value赋值,现在有几杯水
bFull=true;//满了
notify();//唤醒其他线程(让customer去get)
}
try {
wait();//告诉customer去get后自己等待customer的get结束
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public synchronized int get()
{
if (!bFull) {//如果没满就等待,如果满了就不进 **这就是为什么main里面谁先开始不报错的原因**
//get和put方法中的if条件判断起到了至关重要的作用
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
bFull =false;//赋值为没满
notify();//唤醒producer去put
return value;//get的返回值就是put的时候给value赋的值
}
}