Java实现多线程小记
日常开发中会有用到多线程的场景,本文记载两种创建多线程的方式。话不多说,直接上代码。。。
package com;
/**
* @title: ThreadSync
* @Author jishanfeng
* @Date: 2022/9/21 19:50
* @Version 1.0
*/
public class ThreadSync implements Runnable {
volatile int tickets = 100; // 火车票
@Override
public void run() {
//出售火车票
while(true) {
method2();
}
}
private synchronized void method2() { //同步方法的锁对象就是this对象
if (tickets > 0) {
try {
Thread.sleep(100); //线程休眠
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ":" + tickets--);
}
}
public static void main(String[] args) {
// 创建线程对象
ThreadSync tt = new ThreadSync();
Thread t = new Thread(tt);
t.setName("窗口1");
Thread t2 = new Thread(tt);
t2.setName("窗口2");
Thread t3 = new Thread(tt);
t3.setName("窗口3");
// 启动线程对象
t.start();
t2.start();
t3.start();
}
}
package com;
import org.junit.Test;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/**
* @title: ThreadSync1
* @Author jishanfeng
* @Date: 2022/9/21 19:50
* @Version 1.0
*/
public class ThreadSync1 {
final ThreadPoolExecutor threadPool = new ThreadPoolExecutor(10, 20, 10, TimeUnit.SECONDS, new ArrayBlockingQueue<>(10));
volatile int tickets = 80; // 火车票
@Test
public void method2() { //同步方法的锁对象就是this对象
try {
if (tickets > 0) {
CountDownLatch count = new CountDownLatch(tickets);
for (int i = 0; i < 100; i++) {
threadPool.execute(() -> {
if (tickets < 0) {
return;
}
System.out.println(Thread.currentThread().getName() + ":" + tickets-- + "---------" + count);
count.countDown();
});
Thread.sleep(100); //线程休眠
}
count.await();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("关闭线程池");
threadPool.shutdown();
}
}
}