第十五周Java作业
来源:互联网 发布:mac网游下载 编辑:程序博客网 时间:2024/05/18 00:19
1.题目
编写多线程程序,模拟多个人通过一个山洞。这个山洞每次只能通过一个人,每个人通过山洞的时间为2秒(sleep)。随机生成10个人,都要通过此山洞,用随机值对应的字符串表示人名,打印输出每次通过山洞的人名。提示:利用线程同步机制,过山洞用一条输出语句表示,该输出语句打印输出当前过山洞的人名,每个人过山洞对应一个线程,哪个线程执行这条输出语句,就表示哪个人过山洞。
2.代码:
package 作业;
public class Pass implements Runnable{
private Object lock=new Object();
public void run(){
synchronized(lock){
System.out.println(Thread.currentThread().getName());
try{
Thread.sleep(1000);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
public static void main(String[] args){
Pass p=new Pass();
new Thread(p,"ONE").start();
new Thread(p,"TWO").start();
new Thread(p,"THREE").start();
new Thread(p,"FOUR").start();
new Thread(p,"FIVE").start();
new Thread(p,"SIX").start();
new Thread(p,"SEVEN").start();
new Thread(p,"EIGHT").start();
new Thread(p,"NINE").start();
new Thread(p,"TEN").start();
} }
3截图:
1.题目
用两个线程玩猜数字游戏,第一个线程负责随机给出1~100之间的一个整数,第二个线程负责猜出这个数。要求每当第二个线程给出自己的猜测后,第一个线程都会提示“猜小了”、“猜大了”或“猜对了”。猜数之前,要求第二个线程要等待第一个线程设置好要猜测的数。第一个线程设置好猜测数之后,两个线程还要相互等待,其原则是:第二个线程给出自己的猜测后,等待第一个线程给出的提示;第一个线程给出提示后,等待给第二个线程给出猜测,如此进行,直到第二个线程给出正确的猜测后,两个线程进入死亡状态。
2.代码
package 作业;
import java.util.Random;
public class Pass2{
static Object setnumber=new Object();
static Object guess=new Object();
public static void main(String[] args) {
Question question=new Question(setnumber,guess);
Answer answer=new Answer(setnumber,guess);
new Thread(question).start();
new Thread(answer).start();
}
}
class Question implements Runnable{
Object setnumber;
Object guess;
int number;
public Question(Object setnumber, Object guess) {
// TODO Auto-generated constructor stub
this.setnumber=setnumber;
this.guess=guess;
}
@Override
public void run() {
// TODO Auto-generated method stub
synchronized (setnumber) {
Random rand = new Random();
number=rand.nextInt(100);
State.initialize=1;
System.out.println("我生成了数字:"+number);
}
// synchronized()
while(true){
System.out.println("question:"+State.answed);
if(State.answed!=0){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else {
synchronized (guess) {
System.out.println("你猜的是:"+State.answednumber);
if(State.answednumber<number){
State.answed=-1;
System.out.println("猜小了"+State.answed);
}if(State.answednumber>number){
State.answed=1;
System.out.println("猜大了"+State.answed);
}if(State.answednumber==number){
State.answed=2;
System.out.println("猜对了,就是"+State.answed);
break;
}
Thread.yield();
}
}
}
}
}
class Answer implements Runnable{
Object setnumber;
Object guess;
int min=0;
int max=100;
Random rand = new Random();
public Answer(Object setnumber, Object guess) {
// TODO Auto-generated constructor stub
this.setnumber=setnumber;
this.guess=guess;
}
@Override
public void run() {
// TODO Auto-generated method stub
while(State.initialize==0){//如果没有运行question方法就等待。
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
synchronized (setnumber) {
while(true){
if(State.answed==0){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else {
synchronized (guess) {
if(State.answed==1){
max=State.answednumber;
State.answednumber=rand.nextInt(max-min)+min;
System.out.println("我猜:"+State.answednumber);
}
if(State.answed==-1){
min=State.answednumber;
State.answednumber=rand.nextInt(max-min)+min;
System.out.println("我猜:"+State.answednumber);
}
if(State.answed==2) {
System.out.println("我终于猜对了~");
break;
}
State.answed=0;
Thread.yield();
}
}
}
}
}
}
class State{
static int initialize=0;
static int answed=0;
static int answednumber=100;
}
3.截图
总结:
程序在运行期间,处于就绪状态的每个线程都有自己的优先级,main线程(主线程)具有普通优先级。然而线程优先级不是固定不变的,可以通过Thread类的setPriority(int newPriority)方法对其进行设置,该方法中的参数newPriority接收的是1~10之间的整数或者Thread类的三个静态常量。
- 第十五周Java作业
- 第十五周Java作业
- 第十五周作业:Java多线程
- 第十五周Java作业--线程
- 12.6第十五周JAVA作业
- 第十五周作业Java集合框架-泛型
- 第十五周java作业 -猜数字
- 第十五周作业 1.0
- 第十五周作业1
- 第十五周作业3
- 第十五周作业2
- 第十五周作业3.1
- 第十五周作业3.2
- 第十五周作业
- 第十五周Java作业-1线程同步机制
- 第十五周作业任务一
- 第十五周作业任务二
- 算法第十五周作业01
- 安卓 AlertDialog 报 android.content.res.Resources$NotFoundException 的坑
- ENet接口说明
- 页面出现横线滑动条的原因
- 求一个n阶方阵对角线元素之和
- 分享一些前端开发中最常用的JS代码片段以及理解 JS闭包
- 第十五周Java作业
- thinkPHP框架
- LTE RSRP RSSI RSRQ SINR的定义
- BootStrap之datetimepicker插件使用
- IOS OC基础 id是什么?
- springMVC中getHeader 接口直接调用属性
- 设计模式知识连载(5)---继承_1:子类的原型对象-类式继承
- Chrome 63的安全新特性,TLS 1.3终于要来了!
- Android开发之自定义属性的使用