0 0

线程的问题,求解答0

下面是我的一个模拟生产者,消费者的线程demo,先给上代码,问题后面描述

package org.hwq.thread;

class Station{
	private int input = -1;
	
	public synchronized void press(int key){
		if( input != -1 ){
			try {
				System.out.println("input!=-1,输入开始等待");
				wait();
				System.out.println("input!=-1,输入被唤醒");
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		input = key;
		System.out.println("输入按键input="+key);
		notify();
	}
	public synchronized int getKey(){
		if(input == -1){
			try {
				System.out.println("input == -1,获取key开始等待");
				wait();
				System.out.println("input == -1,获取key被唤醒");
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		int key = input;
		System.out.println("取出按键key="+input);
		input = -1;
		notify();
		return key;
	}
}

class Inputor implements Runnable{
	Station station;
	public Inputor(Station station){
		this.station = station;
	}
	public void run(){
		for(int i=0;i<10;i++){
//			System.out.println("点击按键");
			station.press(i);
			try {
				Thread.sleep(100);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}

class Outputor implements Runnable{
	Station station;
	boolean isRunning = true;
	boolean isStoped = false;;
	public Outputor(Station station){
		this.station = station;
	}
	public void run(){
		while(isRunning){
//			System.out.println("开始获取按键");
			int key = station.getKey();
//			System.out.println("获取到key="+key);
		}
		isStoped = false;
	}
	public void stop(){
		isRunning = false;
		while(!isStoped){
			isRunning = false;
		}
	}
}

public class WaitQueue {
	public static void main(String[] args) {
		Station station = new Station();
		station.notify();
		Inputor inputor = new Inputor(station);
		Outputor outputor = new Outputor(station);
		new Thread(inputor).start();
		new Thread(outputor).start();
//这两句有问题
//		outputor.isRunning = false;
//		station.notifyAll();
		
	}
}


由于取出按键的线程是一直执行的,但是我输入按键线程完成了,所以我想手动关闭取出线程,调用了notifyAll会报错。求解答呀。
2012年6月21日 23:58
目前还没有答案

相关推荐

    .Net线程问题解答

    .Net线程问题解答涵盖了许多关于线程编程的关键概念和技术,主要分为基础篇、WinForm多线程编程篇、线程池、同步以及Web和IIS的相关应用。 **基础篇** 1. **怎样创建一个线程**:在.NET中,可以通过`Thread`类创建...

    常见的Java多线程面试问题及解答-15个最流行的java多线程面试问题WORD格式范本.docx

    ### 常见的Java多线程面试问题及解答 #### 一、进程与线程的区别 - **定义**: - **进程**:是指一个正在执行的应用程序或程序实例,每个进程拥有独立的地址空间。 - **线程**:是进程内部的一个执行单元,是...

    vb.bet多线程问题(转载)

    压缩包内的文件名表明了文档的主题,比如“_Net线程问题解答”、“_Net多线程总结”等,这些文件很可能包含了解决线程问题的具体步骤,以及多线程编程的总结性知识。其中,“BackgroundWorker”是一个.NET组件,用于...

    15个多线程问题集锦

    ### 15个多线程问题集锦:Java多线程的核心使用问题及注意事项 ...以上总结了15个多线程问题及其解答,涵盖了Java多线程的核心概念和技术细节。这些问题不仅适用于面试准备,也是开发过程中解决实际问题的重要指南。

    Java线程核心技术及常见面试问题解答

    使用场景及目标:帮助读者深入理解Java线程和并发的核心知识,掌握多线程编程技术,更好地应对技术面试中遇到的相关问题。 其他说明:本文不仅仅罗列理论知识,同时也提供了一些实用技巧和案例,有助于读者将理论...

    C#多线程详细解答.pdf

    C#允许设置线程的优先级,但应谨慎使用,因为优先级高的线程并不保证总是先执行,且可能导致优先级反转和死锁问题。 六、异步编程 1. 异步方法:使用async和await关键字实现异步操作,使主线程可以继续执行其他任务...

    Java多线程-线程安全问题练习题

    在Java多线程编程中,线程安全问题是非常关键的概念,它涉及到多个线程访问共享资源时可能出现的数据不一致或异常情况。本题主要通过两个练习题来加深对线程安全的理解。 ### 练习题1:新年倒计时 #### 题目描述 ...

    Java 多线程编程面试集锦20道问题解答Java多线程编程高难度面试题及解析

    Java 多线程编程是Java开发中的重要领域,特别是在高并发的应用场景下,对多线程的深入理解和熟练运用显得尤为关键。以下是一些关于Java多线程编程的知识点: 1. **线程安全**:在多线程环境中,线程安全意味着多个...

    java多线程设计模式详解(PDF及源码)

    Phase Termination——快把玩具收拾好,去睡觉吧 第11章 Thread-Specific Storage——每个线程的保管箱 第12章 Active Object——接受异步消息的主动对象 总结 多线程程序设计的模式语言 附录A 练习问题的解答 附录B...

    CC++多线程编程练习题大全

    通过以上知识点的学习和实践,可以深入理解CC++多线程编程,解决并发问题,提升程序性能。提供的文件列表可能包含各种多线程编程的练习题目,包括新员工培训的习题纲要,这些资源对于提升编程技能和理论理解非常有...

    ASP技术常遇问题解答-如何防止Application对象在多线程访问中出现错误?.zip

    ASP.NET 是一种强大的 Web ...通过以上方法,你可以有效地管理和防止在多线程环境中使用ASP.NET Application对象时可能出现的问题。在实际开发中,结合具体业务场景,选择最适合的策略来确保应用程序的稳定性和正确性。

    C#线程例子集合

    - `C#面试题 包括 ADO.net 多线程等.rar`:这个文件可能提供了关于线程和ADO.NET的面试问题解答,以及相应的代码示例。 - `threads.rar`:可能包含更复杂的线程使用场景,如线程优先级、线程间的协作等。 了解并...

    Java多线程练习题

    Java多线程是Java编程中的核心概念,它允许程序同时执行多个任务,提高了系统的效率和响应性。...通过这些题目,你可以检验自己对Java多线程的理解程度,并通过解答参考答案来查漏补缺,进一步提升自己的编程能力。

    操作系统_CH4_线程对称多处理和微内核_概念题部分

    - **问题**:表3.5列出了未线程化的操作系统中进程控制块(PCB)中常见的元素。这些元素中哪些应该属于线程控制块(TCB),哪些应该属于多线程系统中的进程控制块? - **解答**: - **ID**:无论是进程还是线程,...

    Java程序员面试中的多线程问题

    ### Java程序员面试中的多线程问题详解 #### 1. 多线程同步的理解 **多线程同步**是Java多线程编程中一个...以上就是Java多线程编程中的一些基本知识点和面试常见问题解答。掌握这些知识对于通过Java面试至关重要。

    线程监视器

    在提供的压缩包文件中,`ProcessThreadsView.chm` 是帮助文档,通常包含了工具的使用指南、功能解释和常见问题解答。`ProcessThreadsView.exe` 是可执行文件,直接运行即可启动线程监视器。`readme.txt` 文件通常...

    java多线程面试相关问题

    以下是对这些核心问题的详细解答: 1. **Java中多线程同步**:Java多线程同步是通过锁机制来确保共享资源的安全访问,防止数据的不一致性。主要的同步机制包括synchronized关键字、wait/notify通信机制、Lock接口...

    线程编程面试题

    以上就是线程编程方面的一些核心面试题及其详细解答。这些问题不仅涵盖了线程的基础知识,还包括了实际开发中常见的应用场景和技术细节。掌握这些知识点对于深入理解Java并发机制及提高面试成功率都至关重要。

    空中网线程题整理

    根据给定文件中的标题、描述、标签以及部分内容,可以总结并深入分析三个关于Java线程相关的面试题目。...通过解答这些问题,不仅可以提升应聘者的技术水平,还能帮助他们更好地理解和掌握Java多线程的相关知识。

    java多线程学习-ftp上传

    文件"forum.php.htm"、"691838.htm"、"6828269.htm"、"3957785.html"、"2aafb73d4408cfe23a87ceff.html"可能是讨论Java多线程和FTP上传的论坛帖子或文章,它们可能包含了实践经验、问题解答和代码示例。 "6828269_...

Global site tag (gtag.js) - Google Analytics