-
JAVA线程同步通信那有问题求解答15
源代码在这里
public class MySynchronized {
public static void main(String[] args) {
YeWu y= new YeWu();
new Thread(new Customer(y)).start();
new Thread(new Producer(y)).start();
}
}
public class Customer implements Runnable{
YeWu y=null;
int i=0;
public Customer(YeWu y){
this.y=y;
}
public void run(){
while(true){
if(i%2==0)
y.put("张三","男");
else{
y.put("李四", "女");
}
i++;
}
}
}
public class Producer implements Runnable{
YeWu y=null;
public Producer(YeWu y){
this.y=y;
}
public void run(){
while(true){
y.get();
}
}
}
//业务类 中会有 put方法(放入数据) 和get方法(取出数据)
public class YeWu {
private String name;
private String sex;
boolean bFlag=false;//false代表没有货物,需要存放货物
public YeWu(){
}
public synchronized void put(String name,String sex){
if(bFlag)//如果条件为true 相当于等待池是满的
{
try{
wait();
}
catch(InterruptedException e){
System.out.println(e.getMessage());
}
}
else {
this.name=name;
this.sex=sex;
this.bFlag=true;
notify();
}
}
public synchronized void get(){
if(!bFlag){
try{
wait();
}
catch(InterruptedException e){
System.out.println(e.getMessage());
}
}
else{
System.out.println(name+" "+sex);
this.bFlag=false;
notify();
}
}
}
具体情况是这样的。
这个程序主要是为了能够间隔的输出“张三”和“李四”
在YeWu类的put和get方法中 如果不加else 那么程序没有任何问题
但是 根据分析 加不加else都是一样的 但是程序在加了else后就会出现问题
求分析、求解答、
高手们、 不要告诉我怎么做、 告诉我为什么会出现这些问题 为什么else加了后就会出现问题
谢谢了
问题补充:java_fei 写道不晓得应该怎么告诉你:原因:你的调用get和put方法是直接在 while循环中,执行太快了,你需要加个try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); }
你生产和消费根本就是无线在生产
加了后还是不能解决问题。因为加入sleep后只是程序的执行减缓了而已。 仅仅是对这个程序、 我敢肯定是wait notify的问题。 不过不知道为什么是它、2012年4月22日 12:26
2个答案 按时间排序 按投票排序
-
Producer的线程被唤醒后,继续执行if代码块的东西,完了后线程退出锁,Producer和Customer竞争锁,有可能Producer再次拿到锁,i自增1,执行后不满足后退出但又拿到锁,i的值就不能满足输出条件了
2012年4月30日 22:30
-
不晓得应该怎么告诉你:原因:你的调用get和put方法是直接在 while循环中,执行太快了,你需要加个
try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); }
你生产和消费根本就是无线在生产2012年4月22日 21:01
相关推荐
内容概要:本文详细介绍了Java线程的基本概念、线程的安全与同步机制、多种线程间通信方式、Java内存模型,以及线程池的原理与使用技巧,涵盖了许多常用的线程和并发控制组件如synchronized、ReentrantLock、...
10. **线程优先级**:Java线程有优先级,但具体效果依赖于操作系统。线程优先级高的线程在调度时更有可能被优先执行,但并不保证。 11. **守护线程(Daemon Thread)**:守护线程是后台线程,当所有非守护线程结束...
三、线程同步 1. synchronized关键字:用于控制多线程对共享资源的访问,防止数据不一致。synchronized可以修饰方法或代码块。 2. volatile关键字:保证了变量在多线程环境下的可见性和有序性,但不保证原子性。 3. ...
Java线程是Java编程中的重要概念,特别是在...总的来说,Java线程的学习不仅包括基础概念,还包括了如何创建和管理线程,以及如何利用并发库解决实际问题。通过视频教程和实践代码,初学者能够逐步掌握这一重要技能。
1. **Java中多线程同步**:Java多线程同步是通过锁机制来确保共享资源的安全访问,防止数据的不一致性。主要的同步机制包括synchronized关键字、wait/notify通信机制、Lock接口及其实现类如ReentrantLock等。 2. **...
Java线程有五种状态:新建(New)、可运行(Runnable)、运行(Running)、等待/阻塞(Blocked)和终止(Terminated)。`start()`方法将线程从新建状态转移到可运行状态,JVM会根据调度策略决定何时执行。运行状态...
当多个线程访问一个对象时,如果不用考虑线程同步问题,那么这个对象就是线程安全的。 6. **Java中synchronized关键字的作用是什么?** synchronized用于控制对共享资源的并发访问,保证原子性,防止数据不一致。...
- Java线程具有优先级,但实际调度很大程度上依赖于操作系统,不保证优先级高的线程优先执行。 10. **中断机制** - Thread类的interrupt()方法用于请求中断线程,isInterrupted()和interrupted()检查中断状态。 ...
以上知识点是Java多线程面试中常见的主题,这份资料会涵盖这些问题的详细解释和解答,对于准备面试或提升技术水平都非常有帮助。通过深入学习和实践,可以更好地理解和运用Java的多线程特性,从而提高代码的并发性能...
7. **线程优先级**:理解Java线程的优先级,以及它在实际应用中的效果和限制。 8. **线程安全**:学习线程安全的类和非线程安全的类,以及如何确保对象在多线程环境下的正确使用。 9. **并发容器**:如...
### 15个多线程问题集锦:Java多线程的核心使用问题及注意事项 ...以上总结了15个多线程问题及其解答,涵盖了Java多线程的核心概念和技术细节。这些问题不仅适用于面试准备,也是开发过程中解决实际问题的重要指南。
5. **多线程**:Java支持多线程编程,例子会解释如何创建和管理线程,以及同步机制如synchronized关键字和wait/notify方法。 6. **输入/输出流**:Java的I/O系统允许程序进行文件操作和网络通信。书中例子会演示...
《Java葵花宝典——各种问题详细解答》 在编程世界中,Java以其跨平台、面向对象、稳定性和高效性而备受青睐。本资源“Java葵花宝典”旨在为初学者和经验丰富的开发者提供一系列关于Java的常见问题解答,以及深入...
理解线程的创建、同步、通信和状态转换,可以编写并发的程序,提高系统的效率。 7. **反射与注解**:反射机制允许在运行时检查类的信息,动态创建对象和调用方法。注解提供了一种元数据,可以用于编译时或运行时的...
习题解答将涵盖同步机制(如synchronized关键字、wait()、notify()方法)和线程通信。 7. **枚举和注解**:枚举是Java中的一种特殊数据类型,用于定义固定的常量集;注解则是元数据,提供了一种安全的方法来向...
Java多线程是Java开发中的核心技能,面试中常常会涉及到这一领域的问题。以下是对给定文件中提到的Java多线程面试题的详细解答: 1. **线程执行顺序控制**:使用`Thread.join()`方法可以确保一个线程在另一个线程...
这个链接可能包含了关于EJB或Java多线程的深入解析、实战案例或问题解答,是进一步学习和理解这些技术的好资源。 通过这个压缩包,学习者可以深入理解企业级Java开发,掌握Java多线程的使用技巧,同时利用Word和...
- **什么是线程同步?** 确保多个线程对共享资源的访问有序,避免数据不一致。 - **Java提供了哪些同步机制?** synchronized关键字、Lock接口(如ReentrantLock)、volatile关键字、Atomic类等。 - **...