头歌 多线程实训
任务1
任务描述
本关任务:定义一个线程类ThreadSum,计算1+2+…+100,每累加一个数,休眠200毫秒,最后输出累加和。在测试方法中,创建此线程对象,并启动线程。
编程要求
根据提示,在右侧编辑器补充代码,定义线程计算1+2+…+100的结果。
开始你的任务吧,祝你成功!
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
package step1;
class ThreadSum extends Thread{
public void run(){
/***********begin****************/
int sum=0;
try {
for(int i=1;i<=100;i++)
{
sum+=i;
sleep(200);
}
}
catch(Exception e){
}
System.out.println("1+2+...+100="+sum);
/***********end****************/
}
}
public class Test1 {
public static void main(String[] args) {
ThreadSum t=new ThreadSum();
/***********begin****************/
t.start();
/***********end****************/
}
}
任务二
任务描述
本关任务:采用Runnable接口方式,定义一个线程类,计算1+2+…,每累加一个数,休眠200毫秒,当累加到N后,和>3000时,输出最小的N值并结束线程。
编程要求
根据提示,在右侧编辑器补充代码,计算并输出最大N值。
测试说明
输入格式:
N=%d
开始你的任务吧,祝你成功!
packa step2;
//补充代码,定义线程任务代码
/********begin************/
class Task1 implements Runnable{
@Override
public void run() {
int sum=0,i;
try {
for(i=1;i<=100;i++)
{
sum+=i;
if(sum>3000)
{
System.out.println("N="+i);
break;
}
}
}
catch(Exception e){
}
}
}
/********end***************/
public class Test2 {
public static void main(String[] args) {
//创建线程并启动线程
/***********begin**********************/
Task1 s = new Task1();
new Thread(s).start();
/************end*************************/
}
}
任务3
本关任务:采用线程同步控制技术,模拟3个窗口同时卖20张票的情景,要求每个窗口都有机会卖出票,并输出当前余票的情况。
编程要求
补全代码,按要求完成任务。
输出要求
输出格式:
正在售出1张票,还剩*张票
开始你的任务吧,祝你成功!
package step3;
class SellTask implements Runnable{
private int num=20; //票总数
//补全卖票任务代码
/*************begin*****************/
@Override
public void run() {
while (true) {
synchronized (SellTask.class) {
if (num == 0)
System.out.println("结束卖票:)");
if (num > 0) {
{
System.out.printf("正在售出1张票,还剩%d张票\n", --num);
try {
Thread.sleep(10);
} catch (Exception e) {
}
}
}else
break;
}
}
}
/*************end************************/
}
public class Test3 {
public static void main(String[] args) {
// 补全测试代码,实例化窗口线程
/*****************begin***************************/
SellTask a = new SellTask();
Thread win1 =new Thread(a);
Thread win2 =new Thread(a);
Thread win3 =new Thread(a);
/******************end**************************/
win1.start();
win2.start();
win3.start();
}
}
/*这一题需要使用到synchronized