package com.my.module;
import java.util.List;
import java.util.Random;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
/**
* 线程调用list,
*/
public class Main {
public static ScheduledExecutorService executors = Executors.newScheduledThreadPool(5);
/**
* 线程安全类
* @param args
*/
public static void main(String[] args) {
List<TestData> TestDataList = new CopyOnWriteArrayList<>();
long now = System.currentTimeMillis();
TestData testData3 = new TestData("2222222", now + 20000);
TestData testData1 = new TestData("1111111", now + 1000);
TestData testData2 = new TestData("2222222", now + 2000);
TestDataList.add(testData3);
TestDataList.add(testData1);
TestDataList.add(testData2);
new Thread() {
@Override
public void run() {
while (true) {
try {
Thread.sleep(500);
// System.out.println("线程休眠5秒");
} catch (InterruptedException e) {
e.printStackTrace();
}
for (TestData testData : TestDataList) {
// 调用移除方法
if (testData.getTime() < System.currentTimeMillis()) {
// 移除掉信息
TestDataList.remove(testData);
executors.submit(new MyThread(testData));
}
}
}
}
}.start();
new Thread() {
@Override
public void run() {
while (true) {
try {
Thread.sleep(2000);
System.out.println("线程222休眠2秒");
} catch (InterruptedException e) {
e.printStackTrace();
}
int temp = new Random().nextInt(10) + 1;
TestData testData3 = new TestData(temp + " ", now + 2000);
TestDataList.add(testData3);
}
}
}.start();
}
public static class MyThread extends Thread {
public TestData testData;
public MyThread(TestData testData) {
this.testData = testData;
}
@Override
public void run() {
try {
// 模拟线程休眠
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("执行方法 " + testData.getData());
}
}
}
package com.my.module;
public class TestData {
public String data;
public long time;
public TestData(String data, long time) {
super();
this.data = data;
this.time = time;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
public long getTime() {
return time;
}
public void setTime(long time) {
this.time = time;
}
@Override
public String toString() {
return "TestData [data=" + data + ", time=" + time + "]";
}
}