一、实验目的(结出本次实验所涉及并要求掌握的知识点)
1、理解掌握线程的基本概念。
2、理解和掌握Java多线程结构和开发过程。
3、了解多线程运行机制和生命周期及状态迁移。
4、学会如何创建线程,掌握线程的调度策略,线程优先级和线程同步。
二、实验内容(结出实验内容具体描述)
1.设计一个线程类,它能输出 50 以内的奇数或偶数。用书中介绍的四种构造线程方法,创建两个线程对象,分别输出奇数和偶数。
2. 给定容量 1000 的 int 型数组,依次存储数据 0~999。下面代码采用多线 程技术计算其累加和。
3. 功能:实现多人竞争打电话,借助互斥机制,确保每个人的说话是连续 的。 class DianHuaTing{//此类对象仅提供多人打电话的共享资源 private final String dht="我是电话亭"; } class App{ public static void main (String[] args) { DianHuaTing d=new DianHuaTing(); String[] s1={"1","2","3"}; String[] s2={"A","B","C","D","E"}; String[] s3={"你好,","我也好,","大家都好!"}; Talkers t1=new Talkers(d,"张三",s1); Talkers t2=new Talkers(d,"李四",s2); Talkers t3=new Talkers(d,"王五",s3); t1.start (); t2.start (); t3.start (); } }
4. 假设某个银行,它可以授受顾客的汇款,每做一次汇款,便可计算出汇 款的总额。现有两个顾客对同一个银行帐号操作,一个顾客分 3 次,每次 将 100 元钱存入,要求存入后将钱的总额输出。
5. 类 BufferArea 用于产生一个[1..100]的随机整数,并可取出此数。存数线 程类 ThreadPutNumber 将数存入缓冲区。读数线程类 ThreadPutNumber 从 缓冲区读取数并判断是否是素数。要求 main 线程最后结束。
三、算法描述及实验步骤(用适当的形式表达算法设计思想与算法实现步骤)
①小实验一:设计一个线程类,它能输出 50 以内的奇数或偶数。用书中介绍的四种构造线程方法,创建两个线程对象,分别输出奇数和偶数。
分析:线程要包括三大点:1、要有汽车Thread类,2、要有线程体void run() 3、要有共享资源.start()
四种方法包括继承Thread类方法;实现Runnable接口方法;内部类方法;内部匿名类方法。四种方法的共同点都是要实现run()函数,然后通过main()实现多线程的同时进行,注意。main是特殊线程,最先启动,且只有当所有线程均结束后才能结束;千万不要重写start(), 不要主动调用run()。
由分析和图示可得代码:
方法一:继承Thread类:
class MyThread extends Thread{
private int n,m;
public MyThread (String name,int n1,int m1) {
super(name);n=n1;m=m1;
}
public void run() {
for(int i=0;i<m;i++) {
if(i%2==n) {
System.out.print(i+" ");
}
}
System.out.println(getName()+"结束 ");
}
}
public class T1{
public static void main(String[] args) {
System.out.print("Main 开始");
MyThread m1=new MyThread("A",0,50);
MyThread m2=new MyThread("B",1,50);
m1.start();m2.start();
System.out.println("当前共有"+Thread.activeCount()+"个线程 ");
System.out.println("Main 结束");
}
}
方法二:实现Runnable接口:
class MyThread implements Runnable{
private int n,m;
public MyThread (int n1,int m1) {
n=n1;m=m1;
}
@Override
public void run() {
// TODO 自动生成的方法存根
for(int i=0;i<m;i++) {
if(i%2==n) {
System.out.print(i+" ");
}
}
System.out.println(Thread.currentThread().getName()+" 结束 ");
}
}
public class T2 {
public static void main(String[] args) {
System.out.print("Main 开始");
MyThread m1,m2;Thread t1,t2;
m1=new MyThread(0,50);
m2=new MyThread(1,50);
t1=new Thread(m1,"A");
t2=new Thread(m2,"B");
t1.start();t2.start();
System.out.println("当前共有"+Thread.activeCount()+"个线程 ");
System.out.println("Main 结束");
}
}
方法三:实现内部类:
class MyThread implements Runnable{
private int n,m;Thread t;
public MyThread(String name,int n1,int m1) {
n=n1;m=m1;t=new Thread(this,name);
}
public void start() {
t.start();
}
public void run() {
for(int i=0;i<m;i++) {
if(i%2==n) {
System.out.print(i+" ");
}
}
System.out.println(Thread.currentThread().getName()+" 结束 ");
}
}
public class T3 {
public static void main(String[] args) {
System.out.print("Main 开始");
MyThread m1,m2;
m1=new MyThread("A",0,50);
m2=new MyThread("B",1,50);
m1.start();m2.start();
System.out.println("当前共有"+Thread.activeCount()

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



