如何实现一个多线程
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,本篇文章为大家展示了如何实现一个多线程,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。传统线程测试:* 子线程循环10次,接着主线程循环100次,接着又回到子线
千家信息网最后更新 2026年10月31日如何实现一个多线程
本篇文章为大家展示了如何实现一个多线程,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
传统线程测试:* 子线程循环10次,接着主线程循环100次,接着又回到子线程循环10次,接着再回到主线程又循环100次,如此循环50次,请写出程序。
一、传统方法(隐式锁)实现
package com.lau.javabase.lock;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * 传统线程测试: * 子线程循环10次,接着主线程循环100次,接着又回到子线程循环10次,接着再回到主线程又循环100次,如此循环50次,请写出程序。 */public class TraditionThreadExerciseTest { volatile Boolean executeInTurn = true; public synchronized void subTask(int times) throws Exception { while(!executeInTurn){ this.wait(); } for(int i = 1; i <= 10; i++){ System.out.println("子任务内部运行第" + i + "次," + "总第" + times + "次"); } executeInTurn = false; this.notify(); } public synchronized void mainTask(int times) throws Exception { while(executeInTurn){ this.wait(); } for(int i = 1; i <= 100; i++){ System.out.println("主任务内部运行第" + i + "次," + "总第" + times + "次"); } executeInTurn = true; this.notify(); } /** * @Description:特别注意:不能将主线程和子线程循环50次的调用写在一个for循环里, * 因为这样会导致后面的跑到前面去,引发错序打印问题 * @param args * @throws InterruptedException */ public static void main(String[] args) throws InterruptedException { TraditionThreadExerciseTest test = new TraditionThreadExerciseTest(); ExecutorService threadPool = Executors.newFixedThreadPool(4); threadPool.submit(() -> { try { for(int i = 1; i <= 50; i++) { test.subTask(i); } } catch (Exception e) { e.printStackTrace(); } }, "subThread"); threadPool.submit(() -> { try { for(int i = 1; i <= 50; i++) { test.mainTask(i); } } catch (Exception e) { e.printStackTrace(); } }, "mainThread"); threadPool.shutdown(); }}二、显示锁实现
package com.lau.javabase.lock;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * 传统线程测试: * 子线程循环10次,接着主线程循环100次,接着又回到子线程循环10次,接着再回到主线程又循环100次,如此循环50次,请写出程序。 */public class TraditionThreadLockTest { volatile Boolean executeInTurn = true; Lock lock = new ReentrantLock(); Condition condition = lock.newCondition(); public void subTask(int times) throws Exception { try{ lock.lock(); while(!executeInTurn){ condition.await(); } for(int i = 1; i <= 10; i++){ System.out.println("子任务内部运行第" + i + "次," + "总第" + times + "次"); } executeInTurn = false; condition.signal(); } finally { lock.unlock(); } } public void mainTask(int times) throws Exception { try{ lock.lock(); while(executeInTurn){ condition.await(); } for(int i = 1; i <= 100; i++){ System.out.println("主任务内部运行第" + i + "次," + "总第" + times + "次"); } executeInTurn = true; condition.signal(); } finally { lock.unlock(); } } /** * @Description:特别注意:不能将主线程和子线程循环50次的调用写在一个for循环里, * 因为这样会导致后面的跑到前面去,引发错序打印问题 * @param args * @throws InterruptedException */ public static void main(String[] args) throws InterruptedException { TraditionThreadLockTest test = new TraditionThreadLockTest(); ExecutorService threadPool = Executors.newFixedThreadPool(4); threadPool.submit(() -> { try { for(int i = 1; i <= 50; i++) { test.subTask(i); } } catch (Exception e) { e.printStackTrace(); } }, "subThread"); threadPool.submit(() -> { try { for(int i = 1; i <= 50; i++) { test.mainTask(i); } } catch (Exception e) { e.printStackTrace(); } }, "mainThread"); threadPool.shutdown(); }}上述内容就是如何实现一个多线程,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。
线程
循环
传统
程序
测试
任务
内容
技能
知识
运行
简明
简明扼要
就是
文章
方法
更多
篇文章
行业
资讯
资讯频道
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
厦门中拓互联网络科技有限公司
互联网通讯科技
科技互联网公司装修
中国 科技 互联网
互联网未来科技
安徽鑫晟辉互联网科技
北京互联网络科技有限公司
掌上梦互联网科技
互联网科技大会
深圳互联网科技怎么样
老年人脱离互联网科技的作文
农村开互联网科技讲堂
常德市电业局互联网科技部
互联网科技与管理
速维有品互联网信息科技(苏州)有限公司
互联网金融科技公司的优势
上海钢联属于互联网科技股吗
35岁以上互联网科技行业
互联网科技大会大佬
网互联网络科技
互联网科技企业
互联网与科技金融数据
互联网 科技
上海互联网科技有限公司
北京互联网络科技有限公司
广州紫鲸互联网科技
中国最先进互联网科技公司
山东有哪些互联网科技公司
广州燕处互联网科技有限公司
广州全民伙伴互联网科技有限公司