本文最后更新于2020年12月9日,已超过 2 个月没更新!
JAVA实验六:线程
实验目的
- 掌握线程的概念。
- 掌握线程的创建方法。
- 掌握线程的常用方法。
- 掌握线程同步的方法
- 掌握线程联合的方法。
实验内容
将实验6文件夹中所附的源程序“RWthread.java”改为用线程联合实现。
实验代码
原RWthread.java代码
import java.util.*;
class RWthread
{
public static void main(String args[])
{
String readName="读线程",writeName="写线程";
ReadWrite rw=new ReadWrite(readName,writeName);
Thread read,write;
read=new Thread(rw);
write=new Thread(rw);
read.setName(readName);
write.setName(writeName);
read.start();
write.start();
}
}
class ReadWrite implements Runnable
{
String ID=null;
String name=null;
String readName,writeName;
boolean flag=false;
public ReadWrite(String s1,String s)
{
readName=s1;
writeName=s;
}
public void run()
{
readOrWrite();
}
public synchronized void readOrWrite() //同步方法
{
if(Thread.currentThread().getName().equals(readName))
{
Scanner reader=new Scanner(System.in);
while(true)
{
if(flag)
{
try{
wait();
}catch(InterruptedException e){}
}
System.out.println("请输入学号:");
ID=reader.nextLine();
if(ID.equals("finish"))
{
System.out.println("\n读线程和写线程工作结束!");
flag=true;
notify();
reader.close();
return;
}
System.out.println("请输入姓名:");
name=reader.nextLine();
flag=true;
notify();
}
}
else if(Thread.currentThread().getName().equals(writeName))
{
while(true)
{
if(!flag)
{
try{
wait();
}catch(InterruptedException e){}
}
if(ID.equals("finish"))
return;
System.out.println("\n输出学号:"+ID+",输出姓名:"+name);
System.out.println();
flag=false;
notify();
}
}
}
}
改成线程联合实现后
import java.util.*;
class RWthread
{
public static void main(String args[])
{
ReadWrite rw=new ReadWrite();
rw.write.start();
}
}
class ReadWrite implements Runnable
{
String ID=null;
String name=null;
boolean flag=false;
String readName="读线程",writeName="写线程";
Thread read,write;
ReadWrite()
{
write=new Thread(this);
write.setName(writeName);
}
public void run()
{
if(Thread.currentThread().getName().equals(readName))
{
Scanner reader=new Scanner(System.in);
System.out.println("请输入学号:");
ID=reader.nextLine();
if(ID.equals("finish"))
{
System.out.println("\n读线程和写线程工作结束!");
reader.close();
return;
}
System.out.println("请输入姓名:");
name=reader.nextLine();
}
else if(Thread.currentThread().getName().equals(writeName))
{
while(true)
{
if(read!=null)
{
read.stop();
}
read=new Thread(this);
read.setName(readName);
read.start();
try{
read.join();
}catch(InterruptedException e){}
if(ID.equals("finish"))
return;
System.out.println("\n输出学号:"+ID+",输出姓名:"+name);
System.out.println();
}
}
}
}
Comments | NOTHING