现在的位置: 首页 > 综合 > 正文

实验10: 线程(6学时)

2012年01月14日 ⁄ 综合 ⁄ 共 2443字 ⁄ 字号 评论关闭

实验目的

(1) 掌握多线程的概念与基本操作方法

(2) 掌握线程的并发控制技术

(3) 掌握线程同步技术

实验内容及要求

一、 编写程序创建5个线程,分别显示5个不同的字符串。分别用继承Thread类以及实现Runnable接口的两种方式实现。

 

 

 

View Code

 1    /**
2 *
3 * @author FREESKYC
4 */
5 public class NewClass {
6 public static void main(String args[]) throws Exception {
7 int i = 0;
8 Hello t = new Hello();
9 Hello t1 = new Hello();
10 Hello t2 = new Hello();
11 Hello t3 = new Hello();
12 Hello t4 = new Hello();
13 t1.start();
14 t2.start();
15 t3.start();
16 t4.start();
17 t.start();
18 }
19 }
20 class Hello extends Thread {
21 int i;
22 public void run() {
23 while (true) {
24 System.out.println("Hello" + i++);
25 if (i == 5) {
26 break;
27 }
28 }
29 }
30 }
31 /**
32 *
33 * @author FREESKYC
34 */
35 public class NewClass {
36 public static void main(String args[]) throws Exception {
37 int i = 0;
38 Hello h1 = new Hello("idgjadkgk");
39 Thread t1 = new Thread(h1);
40 t1.start();
41 Hello h2 = new Hello("dpgkaldl");
42 Thread t2 = new Thread(h2);
43 t2.start();
44 Hello h3 = new Hello("oglrlel");
45 Thread t3 = new Thread(h3);
46 t3.start();
47 Hello h4 = new Hello("iddk");
48 Thread t4 = new Thread(h4);
49 t4.start();
50 Hello h = new Hello("ddddd");
51 Thread t = new Thread(h);
52 t.start();
53 }
54 }
55 class Hello implements Runnable {
56 String i = "";
57 Hello(String str) {
58 this.i = str;
59 }
60 public void run() {
61 System.out.println(i);
62 }
63 }

 

 

 

 

二、编写生产者/消费者模式的程序。生产者每隔100ms产生一个0~9之间的一个数,保存在一个MyNumber类型的对象中,并显示出来。只要这个MyNumber对象中保存了新的数字,消费者就将其取出来显示。试定义MyNumber类,编写消费者、生产者程序,并编写主程序创建一个MyNumber对象,一个生产者线程、一个消费者线程并将这两个线程启动。

 

   /**
*
*
@author FREESKYC
*/
public class NewClass {

public static void main(String[] args) {
MyNumber myber = new MyNumber();
produ t1 = new produ(myber);
consu t2 = new consu(myber);
Thread th1 = new Thread(t1);
Thread th2 = new Thread(t2);
th1.start();
th2.start();
}
}

class produ implements Runnable {

MyNumber num;

produ(MyNumber ber) {
this.num = ber;
}

public void run() {
for (int i = 0; i <= 10; i++) {
synchronized (num) {
if (num.str) {
int x = (int) (Math.random() * 9);
System.out.print("produ:");
num.setnumber(x);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
num.str = false;
num.notify();
} else {
try {
num.wait();
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
if (i == 10) {
System.exit(0);
}
}
}

}
}

class consu implements Runnable {

MyNumber num;

consu(MyNumber myber) {
this.num = myber;
}

@Override
public void run() {
for (int i = 0; i <= 10; i++) {
synchronized (num) {
if (!num.str) {
System.out.print("consu:");
System.out.println(num.getnumber());
num.str = true;
num.notify();
} else {
try {
num.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
if (i == 10) {
System.exit(0);
}
}
}
}

class MyNumber {

int number;
boolean str = true;

public void setnumber(int number) {
this.number = number;
System.out.println(number);
}

public int getnumber() {
return number;
}
}

抱歉!评论已关闭.