针对java实验的思考(四)
2015-12-23 00:42
387 查看
题目:
模拟3个人排队买票,每人买1张票售票员只有1张五元的钱,电影票五元钱一张
张某拿1张二十元的人民币排在孙某前面买票,孙某拿1张十元的人民币排在赵的前面买票,赵某拿1张五元的人民币排在最后
注意事项:
构造函数前面不能加void!线程同步中 notifyAll();不需要注明对象。写在synchronized方法的最后就可以。
源代码:
import javax.xml.stream.events.StartDocument;class test implements Runnable {
Thread a=new Thread(this);
Thread b=new Thread(this);
Thread c=new Thread(this);
int s1=5,s2=10,s3=20;
int s[]={0,0,1};
public synchronized void seller(int sx){
if(sx==5){
System.out.println("张三拿出"+sx+"块钱");
s[2]++;
System.out.println("张三买了票");
}
else if(sx==10){
System.out.println("王大明拿出"+sx+"块钱");
while(s[2]==0) {
System.out.println("王大明要等候");
try {
wait();
} catch (InterruptedException e) {
}
}
s[1]++;
s[2]--;
System.out.println("王大明买了票");
}
else if(sx==20){
System.out.println("赵乐乐拿出"+sx+"块钱");
while(s[1]<1||s[2]<1){
System.out.println("赵乐乐要等候");
try {
wait();
} catch (InterruptedException e) {
}
}
s[0]++;
s[1]--;
s[2]--;
System.out.println("赵乐乐买了票");
}
notifyAll();
}
test(){
a.setName("张三");
b.setName("王大明");
c.setName("赵乐乐");
}
public void run() {
if(Thread.currentThread()==a)
{
seller(s1);
}
if(Thread.currentThread()==b)
{
seller(s2);
}
if(Thread.currentThread()==c)
{
seller(s3);
}
}
}
public class test_thread{
public static void main(String []args){
test t1=new test();
t1.a.start();
t1.b.start();
t1.c.start();
}
}
相关文章推荐
- Java 多线程-上课总结
- Java Scoket编程
- java 解析XML文档
- java继承覆盖总结
- 针对java实验的思考(三)
- java中的会话管理
- 关于java中位运算的左移、右移、无符号右移
- Java线程:创建与启动
- java反射机制
- JavaMail总结
- 一个非常简单的LRU Cache类
- spring 3.0 spring-servlet.xml配置
- 正确利用线程调用堆栈获取上级调用函数的名称
- spring中使用logback日志组件替换log4j
- java代码运行中获取正被调用的函数名
- logback.xml配置
- p6spy使用logback作为日志系统
- ipse(或MyEclipse)中Outline和Package Explorer中小图标的含义
- javax.net.ssl.SSLHandshakeException(Cas导入证书)
- spring-security上手笔记