题目:设计4个线程对象,操作一个共享整型数据(初值为0),两个加线程对共享整型数据执行自增操作,如果自增后值的绝对值为质数就再加2;两个减线程对共享整型数据执行自减操作,如果自减后值的绝对值为质数就再减2。注意对共享数据要互斥访问。编写测试类进行测试。(提示:把共享整型数据封装到数据类中,在类中实现自增操作和自减操作方法。
文章目录
废话不多说,直接上代码
实现代码如下:
主函数
package T2;
/**
* @author 胖胖的山头
* @create 2020-10-24 13:50
*/
public class ThreadTest {
public static void main(String[] args) {
Thread1 thread1 = new Thread1();//加加操作
Thread2 thread2 = new Thread2();//减减操作
Thread t1 = new Thread(thread1);
Thread t2 = new Thread(thread1);
t1.setName("加法线程1");
t2.setName("加法线程2");
Thread t3 = new Thread(thread2);
Thread t4 = new Thread(thread2);
t3.setName("减法线程1");
t4.setName("减法线程2");
t1.start();
t2.start();
t3.start();
t4.start();
}
}
加法线程的实现
package T2;
/**
* @author 胖胖的山头
* @create 2020-10-24 13:51
*/
public class Thread1 implements Runnable{
ShareData obj= new ShareData();
@Override
public void run() {
while (true){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
obj.add();
}
}
}
减法线程的实现
package T2;
/**
* @author 胖胖的山头
* @create 2020-10-24 13:53
*/
public class Thread2 implements Runnable{
ShareData obj= new ShareData();
@Override
public void run() {
while (true){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
obj.dele();
}
}
}
共享数据类的实现
package T2;
/**
* @author 胖胖的山头
* @create 2020-10-24 13:54
*/
public class ShareData {
static int data=0;
int data1=0;
public synchronized void add(){
data++;
notify();
data1=(int) Math.sqrt(data*data);
if(data1>7&&data1%2!=0&&data1%3!=0&&data1%5!=0&&data1%7!=0){
data+=2;
}
System.out.println(Thread.currentThread().getName()+": "+data);
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public synchronized void dele(){
data--;
notify();
data1=(int) Math.sqrt(data*data);
if(data1>7&&data1%2!=0&&data1%3!=0&&data1%5!=0&&data1%7!=0){
data-=2;
}
System.out.println(Thread.currentThread().getName()+": "+data);
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}