第八章例题.docx
- 文档编号:5318654
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:14
- 大小:17.24KB
第八章例题.docx
《第八章例题.docx》由会员分享,可在线阅读,更多相关《第八章例题.docx(14页珍藏版)》请在冰豆网上搜索。
第八章例题
publicclassExample8_1{
publicstaticvoidmain(Stringargs[]){
WriteWordThreadzhang,wang;
zhang=newWriteWordThread("张小红");//新建线程
wang=newWriteWordThread("JamsKeven");//新建线程
zhang.start();//启动线程
for(inti=1;i<=8;i++){
System.out.println("我是主线程中的语句");
}
wang.start();//启动线程
}
}
classWriteWordThreadextendsThread{//Thread的子类负责创建线程对象
WriteWordThread(Strings){
setName(s);//调用Thread类的setName方法为线程起个名字
}
publicvoidrun(){
for(inti=1;i<=8;i++){
System.out.println("我是一个线程,我的名字是"+getName());
}
}
}
publicclassExample8_2{
publicstaticvoidmain(Stringargs[]){
WriteWordThreadzhang,wang;
zhang=newWriteWordThread("张小红",200);//新建线程
wang=newWriteWordThread("JamsKeven",100);//新建线程
zhang.start();//启动线程
wang.start();//启动线程
}
}
classWriteWordThreadextendsThread{
intn=0;
WriteWordThread(Strings,intn){
setName(s);//调用Thread类的方法setName为线程起个名字
this.n=n;
}
publicvoidrun(){
for(inti=1;i<=8;i++){
System.out.println("我是一个线程,我的名字是"+getName());
try{sleep(n);
}
catch(InterruptedExceptione){}
}
}
}
publicclassExample8_3{
publicstaticvoidmain(Stringargs[]){
Leftleft=newLeft();
Rightright=newRight();
left.start();
right.start();
while(true){
if(left.n==8||right.n==8)
System.exit(0);
}
}
}
classLeftextendsThread{
intn=0;
publicvoidrun(){
while(true){
n++;
System.out.printf("\n%s","我在左面写字");
try{sleep((int)(Math.random()*100)+100);
}
catch(InterruptedExceptione){}
}
}
}
classRightextendsThread{
intn=0;
publicvoidrun(){
while(true){
n++;
System.out.printf("\n%40s","我在右面写字");
try{sleep((int)(Math.random()*100)+100);
}
catch(InterruptedExceptione){}
}
}
}
publicclassExample8_4{
publicstaticvoidmain(Stringargs[]){
Strings1="会计",s2="出纳";
Bankbank=newBank(s1,s2);
Threadzhang,cheng;
zhang=newThread(bank);
cheng=newThread(bank);//cheng和zhang是同一目标对象
zhang.setName(s1);
cheng.setName(s2);
bank.setMoney(120);//线程的目标对象修改被线程共享的money
zhang.start();
cheng.start();
}
}
classBankimplementsRunnable{//Bank类必须实现Runnable接口
privateintmoney=0;
Stringname1,name2;
Bank(Strings1,Strings2){
name1=s1;
name2=s2;
}
publicvoidsetMoney(intmount){
money=mount;
}
publicvoidrun(){//接口中的方法
while(true){
money=money-10;
if(Thread.currentThread().getName().equals(name1)){
System.out.println("我是"+name1+"现在有"+money+"元");
if(money<=100){
System.out.println(name1+"进入死亡状态");
return;//如果money小于100,当前线程结束run方法
}
}
elseif(Thread.currentThread().getName().equals(name2)){
System.out.println("我是"+name2+"现在有"+money+"元");
if(money<=60){
System.out.println(name2+"进入死亡状态");
return;//如果money小于100,当前线程结束run方法
}
}
try{Thread.sleep(800);
}
catch(InterruptedExceptione){}
}
}
}
classTargetObjectimplementsRunnable{
privateintnumber=0;
publicvoidsetNumber(intn){
number=n;
}
publicvoidrun(){
while(true){
if(Thread.currentThread().getName().equals("add")){
number++;
System.out.printf("%d\n",number);
}
if(Thread.currentThread().getName().equals("sub")){
number--;
System.out.printf("%12d\n",number);
}
try{Thread.sleep(1000);
}
catch(InterruptedExceptione){}
}
}
}
publicclassExample8_5{
publicstaticvoidmain(Stringargs[]){
ThreadthreadA,threadB,threadC,threadD;
TargetObjecta1=newTargetObject(),//线程的目标对象
a2=newTargetObject();
threadA=newThread(a1);//目标对象是a1的线程
threadB=newThread(a1);
a1.setNumber(10);
threadA.setName("add");
threadB.setName("add");
threadC=newThread(a2);//目标对象是a2的线程
threadD=newThread(a2);
a2.setNumber(-10);
threadC.setName("sub");
threadD.setName("sub");
threadA.start();
threadB.start();
threadC.start();
threadD.start();
}
}
publicclassExample8_8{
publicstaticvoidmain(Stringargs[]){
ClassRoomroom=newClassRoom();
room.zhangXiao.start();
room.zhengMing.start();
room.teacher.start();
}
}
classClassRoomimplementsRunnable{
ThreadzhangXiao,zhengMing,teacher;
ClassRoom(){
teacher=newThread(this);
zhangXiao=newThread(this);
zhangXiao.setName("张小");
zhengMing=newThread(this);
zhengMing.setName("郑明");
teacher.setName("刘老师");
}
publicvoidrun(){
Threadthread=Thread.currentThread();
if(thread==zhangXiao||thread==zhengMing){
try{System.out.println(thread.getName()+"休息10秒后再说问候");
Thread.sleep(10000);
}
catch(InterruptedExceptione){
System.out.println(thread.getName()+"被吵醒了");
}
System.out.println(thread.getName()+"说:
早上好!
");
}
elseif(thread==teacher){
for(inti=1;i<=3;i++){
System.out.println(thread.getName()+"说:
\t上课!
");
try{Thread.sleep(500);
}
catch(InterruptedExceptione){}
}
zhengMing.interrupt();//吵醒zhengMing
zhangXiao.interrupt();//吵醒zhangXiao
}
}
}
publicclassExample8_9{
publicstaticvoidmain(Stringargs[]){
StringaccountantName="会计",cashierName="出纳";
Bankbank=newBank(accountantName,cashierName);
Threadaccountant,cashier;
accountant=newThread(bank);
cashier=newThread(bank);
accountant.setName(accountantName);
cashier.setName(cashierName);
accountant.start();
cashier.start();
}
}
classBankimplementsRunnable{
intmoney=300;
StringaccountantName,cashierName;
publicBank(Strings1,Strings2){
accountantName=s1;
cashierName=s2;
}
publicvoidrun(){
saveOrTake(30);//线程占有CPU资源期间调用了同步方法
}
publicsynchronizedvoidsaveOrTake(intnumber){//同步方法
if(Thread.currentThread().getName().equals(accountantName)){
for(inti=1;i<=3;i++){
money=money+number;
try{Thread.sleep(1000);//存入30万稍歇一下,出纳仍不能使用该方法
}
catch(InterruptedExceptione){}
System.out.println("我是"+accountantName+"目前帐上有"+money+"万");
}
}
elseif(Thread.currentThread().getName().equals(cashierName)){
for(inti=1;i<=2;i++){
money=money-number/2;
try{Thread.sleep(1000);
}
catch(InterruptedExceptione){}
System.out.println("我是"+cashierName+"目前帐上有"+money+"万");
}
}
}
}
publicclassExample8_10{XXXXX
publicstaticvoidmain(Stringargs[]){
Strings1="张三",s2="孙大名",s3="赵中堂";
Cinemacanema=newCinema(s1,s2,s3);
Threadzhang,sun,zhao;
zhang=newThread(canema);
sun=newThread(canema);
zhao=newThread(canema);
zhang.setName(s1);
sun.setName(s2);
zhao.setName(s3);
zhang.start();
sun.start();
zhao.start();
}
}
classCinemaimplementsRunnable{//实现Runnable接口的类(电影院)
TicketSellerseller;//电影院的售票员
Stringname1,name2,name3;//买票人的名字(线程的名字)
Cinema(Strings1,Strings2,Strings3){
seller=newTicketSeller();
name1=s1;
name2=s2;
name3=s3;
}
publicvoidrun(){
if(Thread.currentThread().getName().equals(name1)){
seller.sellTicket(20);
}
elseif(Thread.currentThread().getName().equals(name2)){
seller.sellTicket(10);
}
elseif(Thread.currentThread().getName().equals(name3)){
seller.sellTicket(5);
}
}
}
classTicketSeller{//负责卖票的类
intfiveNumber=1,tenNumber=0,twentyNumber=0;
publicsynchronizedvoidsellTicket(intreceiveMoney){
Strings=Thread.currentThread().getName();
if(receiveMoney==5){
fiveNumber=fiveNumber+1;
System.out.println(s+"给售票员5元钱,售票员卖给"+s+"一张票,不必找赎");
}
elseif(receiveMoney==10){
while(fiveNumber<1){
try{System.out.println(s+"给售票员10元钱");
System.out.println("售票员请"+s+"靠边等一会");
wait();//如果线程占有CPU期间执行了wait(),就进入中断状态
System.out.println(s+"结束等待,继续买票");
}
catch(InterruptedExceptione){}
}
fiveNumber=fiveNumber-1;
tenNumber=tenNumber+1;
System.out.println(s+"给售票员10元钱,售票员卖给"+s+"一张票,找赎5元");
}
elseif(receiveMoney==20){
while(fiveNumber<1||tenNumber<1){
try{System.out.println(s+"给售票员20元钱");
System.out.println("售票员请"+s+"靠边等一会");
wait();//如果线程占有CPU期间执行了wait(),就进入中断状态
System.out.println(s+"结束等待,继续买票");
}
catch(InterruptedExceptione){}
}
fiveNumber=fiveNumber-1;
tenNumber=tenNumber-1;
twentyNumber=twentyNumber+1;
System.out.println(s+"给售票员20元钱,售票员卖给"+s+"一张票,找赎15元");
}
notifyAll();
}
}
publicclassExample8_11{
publicstaticvoidmain(Stringargs[]){
Atarget=newA();//线程thread的目标对象
Threadthread=newThread(target);
thread.setName("张三");
thread.start();
while(target.getStop()==false){}
System.out.println("我是主线程,负责恢复"+thread.getName()+"线程");
target.restart();//恢复thread线程
}
}
classAimplementsRunnable{
intnumber=0;
booleanstop=false;
booleangetStop(){
returnstop;
}
publicvoidrun(){
while(true){
number++;
System.out.println(Thread.currentThread().getName()+"的number="+number);
if(number==3){
try{System.out.println(Thread.currentThread().getName()+"被挂起");
stop=true;
hangUP();//挂起线程
System.out.println(Thread.currentThread().getName()+"恢复执行");
}
catch(Exceptione){}
}
try{Thread.sleep(1000);
}
catch(Exceptione){}
}
}
publicsynchronizedvoidhangUP()throwsInterruptedException{
wait();
}
publicsynchronizedvoidrestart(){
notifyAll();
}
}
publicclassExample8_12{
publicstaticvoidmain(Stringargs[]){
MyThreadthread=newMyThread();
thread.setName("张三");
thread.start();
while(thread.getStop()==false){}
System.out.println("我是主线程,负责恢复"+thread.getName()+"线程");
thread.restart();//恢复thread线程
}
}
classMyThreadextendsThread{
intnumber=0;
booleanstop=false;
booleangetStop(){
returnstop;
}
publicvoidrun(){
while(true){
number++;
System.out.println(Thread.currentThread().getName()+"的number="+number);
if(number==3){
try{System.out.println(Thread.currentThread().getName()+"被挂起");
stop=true;
hangUP();//挂起线程
System.out.println(Thread.currentThread().getName()+"恢复执行");
}
catch(Exceptione){}
}
try{Thread.sleep(1000);
}
catch(Exceptione){}
}
}
publicsynchronizedvoidhangUP()throwsInterruptedException{
wait();
}
publicsynchronizedvoidrestart(){
notifyAll();
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第八 例题