网络编程技术第三次课多线程代码Word文档下载推荐.docx
- 文档编号:17233030
- 上传时间:2022-11-29
- 格式:DOCX
- 页数:13
- 大小:19.67KB
网络编程技术第三次课多线程代码Word文档下载推荐.docx
《网络编程技术第三次课多线程代码Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《网络编程技术第三次课多线程代码Word文档下载推荐.docx(13页珍藏版)》请在冰豆网上搜索。
}catch(InterruptedExceptione){
//如果线程在休眠期被打断,将抛出InterruptedException,
//所以sleep方法需要在try……catch语句块中被调用
}
classRighthandextendsThread{
=5;
我是右手线程"
try{
sleep(300);
2)第二个程序:
StudentAndTeacher.java
publicclassStudentAndTeacher{
/**
*两个线程共享一个对象ComputerSumsum,在运行的过程中修改这个对象的成员变量sum。
*为了使结果尽量不依赖于当前CPU资源的使用情况,应当让线程主动调用sleep方法,让出CPU的控制权进入中断状态
*/
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
ComputerSumsum=newComputerSum();
Peopleteacher=newPeople("
教师"
100,sum);
Peoplestudent=newPeople("
学生"
teacher.start();
student.start();
classComputerSum{
//线程共享的对象类ComputerSum,其中定义了一个数据成员sum
intsum=0;
publicvoidsetSum(intn){
sum=n;
publicintgetSum(){
returnsum;
classPeopleextendsThread{
//类People是Thread的子类
ComputerSumcomputerSum;
inttimeLength;
People(Strings,inttimeLength,ComputerSumsum){//构造方法
setName(s);
//设置Thread的名称
this.timeLength=timeLength;
//设置休眠时间
puterSum=sum;
//设置ComputerSum类的对象sum
publicvoidrun(){//重写Thread父类的run()方法
intm=computerSum.getSum();
//取出computerSum对象中的数据成员sum
computerSum.setSum(m+1);
//将数据成员sum的值加1
我是"
+getName()+"
,现在的和是"
+computerSum.getSum());
//输出当前处于运行中的线程的信息
sleep(timeLength);
//线程休眠timeLength毫秒
3)第三个程序:
StudentAndTeacher1.java
publicclassStudentAndTeacher1{
*StudentAndTeacher1为StudentAndTeacher的改进版本
People1people=newPeople1(200,sum);
people.teacher.start();
people.student.start();
classComputerSum1{
//线程共享的对象类ComputerSum,其中定义了一个数据成员sum
intsum=0;
classPeople1implementsRunnable{
//类People是Thread的子类
Threadteacher,student;
People1(inttimeLength,ComputerSumsum){//构造方法
teacher=newThread(this);
//类People1实现了接口Runnable
teacher.setName("
student=newThread(this);
student.setName("
//设置休眠时间
//设置ComputerSum类的对象sum
publicsynchronizedvoidcomputer(Threadthread){
intm=computerSum.getSum();
//取出computerSum对象中的数据成员sum
computerSum.setSum(m+1);
//将数据成员sum的值加1
System.out.println("
+thread.getName()+"
+computerSum.getSum());
publicvoidrun(){//重写Thread父类的run()方法
if(Thread.currentThread()==teacher){
computer(teacher);
}elseif(Thread.currentThread()==student){
computer(student);
Thread.sleep(timeLength);
//线程休眠timeLength毫秒
4)第四个程序:
GuessNumberGame.java
/*猜数程序
第一个线程givenNumberThread负责随机给出1-100之间的一个整数
第二个线程guessNumberThread负责猜出这个数
每当第二个线程给出自己的猜测后
第一个线程会将其比较后,提示“猜大了”,“猜小了”,“猜对了”*/
publicclassGuessNumberGame{
GuessNumbergn=newGuessNumber();
gn.givenNumberThread.start();
//启动线程
gn.guessNumberThread.start();
classGuessNumberimplementsRunnable{
intrealNumber,guessNumber,min=0,max=100,message;
//realNumber:
随机数;
guessNumber:
某次猜得的数;
message:
提示信息
finalintSMALLER=-1,LARGER=1,SUCCESS=8;
ThreadguessNumberThread,givenNumberThread;
//guessNumberThread:
线程,给出随机整数并判定线程givenNumberThread猜得的数字是否正确
GuessNumber(){
guessNumberThread=newThread(this);
givenNumberThread=newThread(this);
true;
if(Thread.currentThread()==givenNumberThread){
//如果当前正在运行的线程是givenNumberThread
if(i==1){//givenNumberThread线程第一次运行时,给出一个随机数
realNumber=(int)(Math.random()*100)+1;
System.out.println("
给你一个随机数,猜猜是多少?
realNumber="
+realNumber);
}else{
/*比较guessNumber和realNumber的大小,
并向猜数线程guessNumberThread传递猜大了或猜小了等信息*/
if(guessNumber>
realNumber){//猜得的数偏大
message=LARGER;
System.out.println("
您猜的数偏大"
}elseif(guessNumber<
realNumber){//猜得的数偏小
message=SMALLER;
您猜的数偏小"
}elseif(guessNumber==realNumber){
//猜对了,guessNumber==realNumber
message=SUCCESS;
恭喜,您猜对了!
"
return;
//猜对了,givenNumberThread运行结束,返回
}
}//else
try{
Thread.sleep(1500);
//休眠1000毫秒,让出CPU资源给其他线程
}catch(InterruptedExceptione){
}
}//if
if(Thread.currentThread()==guessNumberThread){
//如果当前正在运行的线程是guessNumberThread
if(i==1){
/*guessNumberThread线程第一次运行时,
guessNumber=(min+max)/2=(0+100)/2=50
后面guessNumberThread采用“折半”查找的原理
根据每次从guessNumberThread那里得到的提示信息,
修改max或min的值,给出新的guessNumber的取值*/
guessNumber=(min+max)/2;
我猜这个数是"
+guessNumber);
if(message==SMALLER){
min=guessNumber;
guessNumber=(min+max)/2;
}elseif(message==LARGER){
max=guessNumber;
}elseif(message==SUCCESS){
//根据message得知猜对了,guessNumberThread运行结束,返回
我成功了!
!
5)第五个程序GuessNumberGame1.java
……代码略……。
6)第六个程序ScrollWordsAndTimer.java
/**
*本例中是一个带滚动字幕的小时钟,在文本框中显示系统当前时间,
*滚动的字幕在单击“加速”键后,会加速字幕的滚动速度;
单击“停止“后,会停止滚动
*单击”开始“后,文字会重新开始滚动
publicclassScrollWordsAndTimer{
newSrollingAndTimerFrame();
classSrollingAndTimerFrameextendsJFrameimplementsRunnable,ActionListener{
JButtonfastWordsBtn,stopWordsBtn,startWordsBtn,startTimerBtn,
stopTimerBtn;
//加速滚动文字,停止滚动文字,(重新)开始滚动文字,开始显示时间,停止显示时间
JLabellabelOfScrollWords,labelOfBlank,labelOfTimer;
ThreadscrollWordsThread,timerThread;
//滚动文字线程,显示时钟线程
//JTextAreatextOfTime;
JTextFieldtextOfTime;
//显示时钟的文本框
booleanstopScrolling,stopTimer;
//是否停止滚动标志位,是否停止显示系统时间标志位
SrollingAndTimerFrame(){
setTitle("
一个带滚动字幕的小字典"
setLayout(newFlowLayout());
fastWordsBtn=newJButton("
加速滚动"
startWordsBtn=newJButton("
开始滚动"
startWordsBtn.setEnabled(false);
stopWordsBtn=newJButton("
停止滚动"
startTimerBtn=newJButton("
开始显示时间"
stopTimerBtn=newJButton("
停止显示时间"
fastWordsBtn.addActionListener(this);
//注册事件监视器
startWordsBtn.addActionListener(this);
stopWordsBtn.addActionListener(this);
stopTimerBtn.addActionListener(this);
startTimerBtn.addActionListener(this);
textOfTime=newJTextField(10);
labelOfBlank=newJLabel("
"
JPaneljp1=newJPanel();
jp1.add(textOfTime);
jp1.add(startTimerBtn);
jp1.add(stopTimerBtn);
add(jp1);
JPaneljp2=newJPanel();
jp2.add(labelOfBlank);
jp2.add(fastWordsBtn);
jp2.add(startWordsBtn);
jp2.add(stopWordsBtn);
add(jp2);
labelOfScrollWords=newJLabel("
欢迎使用本系统!
//JLabel,负责滚动文字的显示
add(labelOfScrollWords);
scrollWordsThread=newThread(this);
//创建线程
timerThread=newThread(this);
setBounds(100,100,420,200);
setVisible(true);
validate();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
scrollWordsThread.start();
//启动滚动文字线程
if(Thread.currentThread()==scrollWordsThread){
//如果当前正在运行中的线程是scrollWordsThread
while(true){
intx=labelOfScrollWords.getBounds().x;
inty=120;
x+=5;
//水平坐标
labelOfScrollWords.setLocation(x,y);
//将滚动文字移动到新位置
if(x>
380){
x=10;
labelOfScrollWords.setLocation(x,y);
scrollWordsThread.sleep(1000);
}catch(InterruptedExceptionex){
if(stopScrolling==true){
//如果单击了”停止滚动“按钮,线程scrollWordsThread结束返回
return;
elseif(Thread.currentThread()==timerThread){
//如果当前正在运行中的线程是timerThread
Datedate=newDate();
Stringstr=date.toString().substring(11,19);
//把date中的時間提取出来
textOfTime.setText(str);
//把时间显示在文本框中
Thread.sleep(1000);
//休眠1000毫秒
if(stopTimer==true){
return;
//如果单击了停止显示时间按钮,线程timerThread停止返回
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==fastWordsBtn){
//如果单击了”加速“按钮,”吵醒“正在休眠的线程scrollWordsThread
scrollWordsThread.interrupt();
}elseif(e.getSource()==startWordsBtn){
//如果单击了”开始滚动“
if(!
scrollWordsThread.isAlive()){
//判定线程是否已经死亡(是否还占有实体)
scrollWordsThread=newThread(this);
//给线程分配实体
stopScrolling=false;
scrollWordsThread.start();
//启动线程
startWordsBtn.setEnabled(false);
//将”开始滚动“按钮设为不可用
}elseif(e.getSo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络 编程 技术 第三次 多线程 代码
![提示](https://static.bdocx.com/images/bang_tan.gif)