一、实验目的及要求
1. 实验目的
- 使用Thread子类或者Runnable接口创建多线程;
- 能够实现多线程的线程同步。
2. 实验要求
- 多个线程同时访问同一个变量时,不能发生读取错误;
- 数据不能产生不一致;
- 对实验出现的问题进行分析,确定调试方法,进行总结。
二、实验环境
- 硬件要求: Thinkpad T590笔记本一台(带Windows10操作系统)
- 软件要求: IntelliJ IDEA 2020.1,jdk14.0.2
三、实验内容
- 实验方案:在IDEA中编写代码,运行检验,看结果是否符合预期。
- 实验步骤:在书上找到相关技术算法的描述,然后建立Java项目、包、类,编写代码,不断调试并检验,完成实验报告。
- 设计思路:先建立一个主类WorkingSpace,然后再建立一个Create类,实现四个线程同时访问一个变量,不断调试,直至结果不出问题。
四、附源代码
Create.java
public class Create implements Runnable {//使用Runnable创建多线程
static int nn=1;//定义静态变量
@Override
public void run() {//重写方法run()
int n=0;
while(nn<=800)//循环800次
{
if(sell())
{
n++;
//防止次序重复
}
}
System.out.println(Thread.currentThread().getName()+"-->"+n);//结束后输出每个线程访问的次数
}
public synchronized boolean sell()//判断是否生产完毕
{
if (nn<=800)
{
System.out.println(Thread.currentThread().getName()+" 生产第 "+ nn++ +" 个零件");
//输出结果,同时使次序自增
try{
Thread.sleep(10);
}catch (InterruptedException e)//捕获Runnable的阻塞异常信息
{
e.printStackTrace();//在命令行打印异常信息在程序中出错的位置及原因
}
return true;//返回true
}
return false;//返回false
}
}
WorkingSpace.java
public class WorkingSpace {
public static void main(String[] args) {
Create workspace=new Create();//创建Create类对象
//创建四个子线程
Thread thread1=new Thread(workspace,"workshop1");
Thread thread2=new Thread(workspace,"workshop2");
Thread thread3=new Thread(workspace,"workshop3");
Thread thread4=new Thread(workspace,"workshop4");
//四个生产线全部启动
thread1.start();
thread2.start();
thread3.start();
thread4.start();
}
}