线程通信-生产者消费问题
package adwad153;
public class dwad15 {
public static void main(Stringargs) {
Clerk clerk = new Clerk();
Producter p1 = new Producter(clerk);
p1.setName("生产者1");
Consumer c1 = new Consumer(clerk);
c1.setName("消费者1");
Consumer c2 = new Consumer(clerk);
c2.setName("消费者2");
p1.start();
c1.start();
c2.start();
}
}
class Clerk {
private int count = 0;
public synchronized void product() {
if (count < 20) {
++count;
System.out.println(Thread.currentThread().getName() + ":开始生产第" + count + "个产品");
notify();
} else {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public synchronized void order() {
if (count > 0) {
System.out.println(Thread.currentThread().getName() + ":开始消费第" + count + "个产品");
count--;
notify();
} else {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Producter extends Thread {
private Clerk clerk;
public Producter(Clerk clerk) {
this.clerk = clerk;
}
@Override
public void run() {
System.out.println(this.getName() + ":开始生产产品");
while (true) {
try {
this.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
clerk.product();
}
}
}
class Consumer extends Thread {
private Clerk clerk;
public Consumer(Clerk clerk) {
this.clerk = clerk;
}
@Override
public void run() {
System.out.println(this.getName() + ":开始消费产品");
while (true) {
try {
this.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
clerk.order();
}
}
}
线程池
package acxwacawecew;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
class numberThread1 implements Runnable {
@Override
public void run() {
for (int i = 0; i <= 100; i++) {
if (i % 2 == 0) {
System.out.println(Thread.currentThread().getName() + ":" + i);
}
}
}
}
class numberThread2 implements Runnable {
@Override
public void run() {
for (int i = 0; i <= 100; i++) {
if (i % 2 != 0) {
System.out.println(Thread.currentThread().getName() + ":" + i);
}
}
}
}
public class threadpool {
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(10);
ThreadPoolExecutor service = (ThreadPoolExecutor) executorService;
service.setCorePoolSize(15);
executorService.execute(new numberThread1());
executorService.execute(new numberThread2());
executorService.shutdown();
}
}