📄 exam1.java
字号:
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.text.NumberFormat;
import java.lang.*;
class shell
{
int tick = 4; //票的数目
String s;
public synchronized void order(int n) //n代表资源,>5,代表线程no1得到资源,<5代表线程no2得到资源
{
if(tick>0) //判断票是否已卖完,未卖完就运行以下代码,否则输出服务暂停
{
if (Example2.n>=5) //判断no1线程得到资源
{
while( Example2.cpu < 5) //判断是否同时分配到cpu,>5,代表no1得到cpu。<5,代表no2得到cpu
{
try
{
s="No1得到资源,但得不到cpu,放弃资源进入等待";
Example2.text.append("\n"+ s +"剩余票数 " +tick); //得到资源但得不到cpu
Example2.n=Example2.n-5; //释放资源,进入等待
wait();
}
catch(InterruptedException e){}
}
s="No1得到资源,同时亦得到cpu,售出 1 张票,";
tick = tick-1; //得到资源,卖1张票
Example2.text.append("\n"+ s +"剩余票数 " +tick);
Example2.n=Example2.n-5;
Example2.cpu=Example2.cpu-5; //释放资源同cpu
s="No1售票完毕,释放资源同cpu,,";
Example2.text.append("\n"+ s +"剩余票数 " +tick);
}
else if (Example2.n<5) //判断no2得到资源
{
while( Example2.cpu > 5) //判断是否同时分配到cpu
{
try
{
s="No2得到资源,但得不到cpu,放弃资源进入等待"; //得到资源但得不到cpu
Example2.text.append("\n"+ s +"剩余票数 " +tick);
Example2.n=Example2.n+5; //释放资源,进入等待
wait();
}
catch(InterruptedException e){}
}
s="No2得到资源,同时亦得到cpu,售出 1 张票,";
tick = tick-1; //得到资源,卖1张票
Example2.text.append("\n"+ s +"剩余票数 " +tick);
Example2.n=Example2.n+5;
Example2.cpu=Example2.cpu+5; //释放资源同cpu
s="No2售票完毕,释放资源同cpu,,";
Example2.text.append("\n"+ s +"剩余票数 " +tick);
}
notify(); //唤醒等待的资源
}
else //没有票,暂停服务
{
Example2.text.append("\n"+"剩余票数 " +tick);
Example2.text.append("\n"+"服务暂停");
}
}
}
public class Example2 extends Applet implements Runnable
{
shell source;
Thread No1,No2;
static TextArea text;
static int n;
static int cpu;
public void init()
{
No1=new Thread(this);
No2=new Thread(this);
text=new TextArea(15,45);
add(text);
source=new shell();
}
public void start()
{
for(int t=1;t<6;t++) //一天里,售票点进行多次售票
{
cpu=(int)(Math.random()*10); //随机返回n同cpu的值,相当于no1同no2竟争资源,系统分配cpu
n=(int)(Math.random()*10);
No1.start();
No2.start();
No1=new Thread(this);
No2=new Thread(this);
}
}
public void run()
{
source.order(n); //要模拟线程同步发生,但系统会按顺序执行No1.start();No2.start();所以要用方法order里的资源和cpu来约束线程的执行顺序,相当于同步发生时,谁得cpu谁就先执行!
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -