- 浏览: 666823 次
- 性别:
- 来自: 常州
-
文章分类
- 全部博客 (345)
- java (63)
- Struts2 (11)
- Spring2.5 + (17)
- Hibernate (25)
- Struts2 Spring hibernate (5)
- log4j (3)
- apache tomcat (12)
- oracle (22)
- oracle_存储过程 (4)
- mysql (18)
- jquery (11)
- prototype (5)
- js (19)
- quartz (5)
- 设计模式 (6)
- eclipse/MyEclipse 注意事项 (9)
- eclipse (0)
- css (6)
- 正则表达式 (2)
- linux (18)
- PHP (6)
- 多线程 (20)
- XML (1)
- jstl (3)
- mongoDB (7)
- android (20)
- 反射 (1)
- IOS (46)
- SVN (3)
- C/C++ (4)
- 百度地图 (2)
- IO/SOCKET (3)
- 百度地图JS (1)
- 树莓派/香蕉派 (1)
最新评论
-
anny101:
想转发一下,不知道怎么转发。评论一下吧。方便查看。
fetch = FetchType.EAGER 作用 -
Navee:
果然我这也是是防火墙问题
解决 Linux 安装 httpd局域网无法访问 -
dhyang909:
...
oracle 10g+ 行列转换 -
国产希特勒:
真强,居然有人把公司的面试题挂到javaeye上了
锦江国际的一道面试题(很简单) -
tomfish88:
比如我要拦截不同业务的service类里面的方法 @Poi ...
Spring AOP annotation 拦截表达式 分析
通过实现Runnable来实现多线程:
通过继承Thread来实现多线程:
注意:继承了Thread,那么不用再new Thread来起线程,直接用Runner1.start()即可
通过Thread.join()方法来等待当前线程走完
下面的程序,如果join了,那么n就等于1000
在多线程中如何传递参数:
简单的是通过构造函数和set()来传值
复杂的是通过回调函数传值
下面的代码描述了回调传值的用法:
这个程序可能会输出"NULL":
因为线程可能还没有赋值就已经syso了。
解决办法是在start()后面加个join();
public class TestThread1{ public static void main(String[] args){ Runner1 r = new Runner1(); Thread t = new Thread(r); t.start(); //注意:t.run(); 是指方法调用,先执行Runner1()后,再往下执行。 for(int i=200; i<300; i++){ System.out.println("main--" + i); } } } class Runner1 implements Runnable{ public void run(){ for(int i=0; i<100; i++){ System.out.println("Runner1--" + i); } } }
public class Test1 implements Runnable { @Override public void run() { for (int i = 0; i < 10; i++) { System.out.println("Thread: " + i ); try { Thread.sleep((int)Math.random() * 200); } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args) { Test1 t1 = new Test1(); Thread t_1 = new Thread(t1); t_1.setName("aaa"); t_1.start(); for (int i = 0; i < 10; i++) { System.out.println("main: " + i ); try { Thread.sleep((int)Math.random() * 200); } catch (InterruptedException e) { e.printStackTrace(); } } } }
通过继承Thread来实现多线程:
public class TestThread1{ public static void main(String[] args){ Runner1 r = new Runner1(); r.start(); for(int i=200; i<300; i++){ System.out.println("main--" + i); } } } class Runner1 extends Thread{ public void run(){ for(int i=0; i<100; i++){ System.out.println("Runner1--" + i); } } }
注意:继承了Thread,那么不用再new Thread来起线程,直接用Runner1.start()即可
通过Thread.join()方法来等待当前线程走完
下面的程序,如果join了,那么n就等于1000
public static volatile int n = 0; public void run() { for (int i = 0; i < 10; i++, n++) try { sleep(3); // 为了使运行结果更随机,延迟3毫秒 } catch (Exception e) { } } public static void main(String[] args) throws Exception { Thread threads[] = new Thread[100]; for (int i = 0; i < threads.length; i++) // 建立100个线程 threads[i] = new Test4(); for (int i = 0; i < threads.length; i++) // 运行刚才建立的100个线程 threads[i].start(); if (args.length > 0){ for (int i = 0; i < threads.length; i++){ // 100个线程都执行完后继续 threads[i].join(); } } System.out.println("n=" + Test4.n); }
在多线程中如何传递参数:
简单的是通过构造函数和set()来传值
复杂的是通过回调函数传值
下面的代码描述了回调传值的用法:
package com.mhm.test; public class Test5 extends Thread { private Work work; public Test5(Work work) { this.work = work; } public void run() { java.util.Random random = new java.util.Random(); Data data = new Data(); int n1 = random.nextInt(1000); int n2 = random.nextInt(2000); int n3 = random.nextInt(3000); work.process(data, n1, n2, n3); // 使用回调函数 System.out.println(String.valueOf(n1) + "+" + String.valueOf(n2) + "+" + String.valueOf(n3) + "=" + data.value); } public static void main(String[] args) { Thread t1 = new Test5(new Work()); Thread t2 = new Test5(new Work()); Thread t3 = new Test5(new Work()); t1.start(); t2.start(); t3.start(); } } class Data { public int value = 0; } class Work { public void process(Data data, Integer... numbers) { for (int n : numbers) { data.value += n; } } }
这个程序可能会输出"NULL":
因为线程可能还没有赋值就已经syso了。
解决办法是在start()后面加个join();
package com.mhm.test; public class Test6 extends Thread { private String value1; private String value2; public void run() { value1 = "通过成员变量返回数据"; value2 = "通过成员方法返回数据"; } public static void main(String[] args) throws Exception { Test6 thread = new Test6(); thread.start(); System.out.println("value1:" + thread.value1); System.out.println("value2:" + thread.value2); } }
发表评论
-
编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC
2014-08-07 13:10 2349package test1; import j ... -
java 多线程 笔试题
2014-08-07 12:30 12721、4线程,2个对i加,2个对i减 2、实现孙线程 ... -
基于ArrayBlockingQueue的生产者和消费者
2014-08-06 23:02 760学习写的测试,可能有BUG。 有了ArrayBlocki ... -
每隔一秒打印一次日志,共16秒打印完,加4个线程修改程序,使之4秒打印完
2014-08-06 17:20 1178原来的程序: package test1; publ ... -
通过semaphore信号灯,开启多个线程,但只并发3个线程
2014-08-04 22:07 936package com.mhm.test1; ... -
用锁实现缓存机制
2014-08-01 14:11 839package test1; import java. ... -
用Lock和Condition,实现主线程执行5次,子线程再执行10次,孙线程执行15次,如此反复5次
2014-08-01 13:50 875package test1; import java. ... -
用Lock和Condition,实现主线程执行5次,子线程再执行10次,孙线程执行15次,如此反复5次
2014-08-01 13:49 1package test1; import ja ... -
通过代码,解释ExecutorService基本用法
2014-07-29 17:49 608package test1; import ja ... -
4线程,2个对i加,2个对i减
2014-07-29 16:23 875package test1; /** * 设计 ... -
简单多线程卖票代码
2014-07-29 15:45 860public class Thread2 { pu ... -
通过代码,了解ThreadLocal
2014-07-29 14:06 555在看此代码时,先看http://www.iteye.com ... -
子线程先执行10次,主线程执行5次,子线程再执行10次,主线程再执行5次,如此反复3次
2014-07-28 22:21 806package com.mhm.test1; / ... -
synchronized 在多线程中的一些 理论
2011-04-22 10:58 820package com.mhm.test; public ... -
为什么要在多线程中进行数据同步
2011-04-21 17:28 1068package com.mhm.test; public ... -
多线程理论知识
2011-04-21 11:58 914Java中建立线程有两种方法,一种是继承Thread类 ... -
多线程之:生产者消费者
2011-01-07 14:55 1003一直纠结与生产和消费完后为什么要sleep(),现在终于搞明白 ... -
线程模仿 ATM取钱
2011-01-07 11:12 1092自己写着学习用的 public class TestThre ... -
线程的同步
2011-01-05 17:26 958线程的同步: public class TestSync im ... -
线程的状态
2011-01-05 11:45 1001线程的状态:
相关推荐
通过命令行,用户可以指定使用多线程进行文件复制,从而显著提高复制速度。例如,使用"/MT[:n]"参数可以指定复制线程的数量,这里的n值可以在1到128之间。这一功能大大提升了文件管理的效率。 #### 十二、解锁被...
这一设计充分考虑到了用户的操作习惯和效率需求,使得原本需要多个步骤才能完成的文件传输过程,现在只需几秒钟即可实现。特别是对于那些经常需要进行大量文件传输的用户来说,这样的设计大大节约了他们的时间成本。...
55links友情链接网址跟踪器,放在桌面,每次直接打开就可以访问55links友情链接交易平台,方便快捷。
AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!
moore_01_0909
FIBR English learning
AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!
OIF_IEEE802.3_liaison_19OCt09
做网络安全FTP内容的实验必备
nagarajan_01_1107
AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!
mellitz_3cd_01_0318
PyQt6实战派 配套代码
陕西省省级非物质文化遗产经纬度数据统计表 统计内容包含以下字段: 1. 项目名称 2. 遗产类别 3. 入选批次 4. 所属地区 5. 申报地区/单位 6. 地理经度 7. 地理纬度 该统计表系统记录了陕西省省级非物质文化遗产的地理空间信息,为文化遗产的数字化保护与研究工作提供了重要的数据支撑。
ran_3ck_02a_0918
毕业设计_基于springboot+vue开发的汽车租赁管理系统【源码+sql+可运行】【50308】.zip 全部代码均可运行,亲测可用,尽我所能,为你服务; 1.代码压缩包内容 代码:springboo后端代码+vue前端页面代码; 脚本:数据库SQL脚本 效果图:运行结果请看资源详情效果图 2.环境准备: - JDK1.8+ - maven3.6+ - nodejs14+ - mysql5.6+ - redis 3.技术栈 - 后台:springboot+mybatisPlus+Shiro - 前台:vue+iview+Vuex+Axios - 开发工具: idea、navicate 4.功能列表 - 系统设置:用户管理、角色管理、资源管理、系统日志 - 业务管理:汽车管理、客户管理、租赁订单 3.运行步骤: 步骤一:修改数据库连接信息(ip、port修改) 步骤二:找到启动类xxxApplication启动 4.若不会,可私信博主!!!
# Runcorder - 跑步训练管理系统 Runcorder 是一款专为跑步爱好者、马拉松运动员及高校体育生设计的本地化跑步训练管理工具,基于 Python 开发,结合 Tkinter 图形界面与强大的数据处理能力,为用户提供从训练记录到数据分析的全方位支持。无论是初学者还是专业跑者,Runcorder 都能帮助你科学规划训练、精准追踪进度,并通过可视化图表直观呈现训练成果,让你的跑步训练更智能、更高效! - **多用户管理**:支持创建、加载和删除用户档案,每个用户的数据独立存储,确保隐私与安全。 - **科学训练记录**:全维度记录跑步数据,包括日期、里程、配速、自评和晨跑标记,支持智能输入校验,避免数据错误。 - **多维数据分析**:通过动态可视化图表展示跑步里程趋势、平均配速曲线,支持自定义 Y 轴范围,帮助用户深入理解训练效果。 - **高阶功能**:提供 4 种科学训练模式(有氧/无氧/混合),支持历史记录修改与删除,数据以 JSON 格式持久化存储,跨平台兼容。
paatzsch_01_0708
AnythingLLM是一个全栈应用程序,您可以使用流行的开源大语言模型,再结合向量数据库解决方案构建个人本地AI大模型知识库
mellitz_3ck_02_0519