怎么把线程分别分配给每段数据打印输出?
又怎么保证不重复数字?
预先将这20分为五组,每个线程各自打印各自的数。
代码如下:
public class MyThread implements Runnable {
public int[] nums;
public int count;
public MyThread(int[] nums, int count) {
this.nums = nums;
this.count = count;
}
public static void main(String[] args) {
int n = 20;
int m = 5;
int size = n / m;
int[][] totalNums = new int[m][size];
for (int i = 0; i < n; i++) {
totalNums[i / size][i % size] = i+1;
}
Thread[] threads = new Thread[m];
for (int i = 0; i < m; i++) {
int[] mums = totalNums[i];
MyThread myThread = new MyThread(mums, i + 1);
threads[i] = new Thread(myThread);
}
for (int i = 0; i < m; i++) {
threads[i].start();
}
}
@Override
public void run() {
for (int num : nums) {
System.out.println("第" + count + "个线程:" + num);
}
}
}
要将线程分别分配给每个数字进行打印输出,可以使用线程池来管理线程。线程池可以预先创建一定数量的线程,并将任务队列中的任务分配给这些线程进行处理。
为了保证不重复打印数字,可以在每个线程的任务中加入一个判断,如果该数字已经被打印过了,则跳过该任务。具体实现可以参考以下代码:
import threading
# 定义线程池类
class ThreadPool:
def __init__(self, pool_size):
self.pool = []
for i in range(pool_size):
t = threading.Thread(target=self.worker)
self.pool.append(t)
t.start()
def worker(self):
while True:
task = self.task_queue.get()
if task is None:
break
# 处理任务
print(task)
def add_task(self, task):
self.task_queue.put(task)
# 创建线程池,并添加任务
pool_size = 5
tp = ThreadPool(pool_size)
tasks = []
for i in range(20):
tasks.append(i+1)
for i in range(0, len(tasks), pool_size):
tp.add_task(tasks[i:i+pool_size])
# 等待所有线程完成任务
tp.add_task(None)
while True:
if tp.task_queue.empty():
break