社区
Java SE
帖子详情
求问关于线程的程序执行问题
yangzhen0126
2016-10-20 04:59:50
程序如图,运行结果为1000 b=1000,谁能说一下程序执行的过程,为什么第一行会出1000,而不是2000
...全文
527
10
打赏
收藏
求问关于线程的程序执行问题
程序如图,运行结果为1000 b=1000,谁能说一下程序执行的过程,为什么第一行会出1000,而不是2000
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
NewMoons
2016-11-05
打赏
举报
回复
9楼是是是是是是正解。
休息的风
2016-10-25
打赏
举报
回复
楼主会问这上问题,其实是还没理解线程是如何工作的。 对于这段程序会会打印出哪个值,是跟CUP时间片轮转有关的。代码涉及到两个线程,一个是main线程,一个是新开的t线程;当main执行到t.start()时,接下来就是main和t在抢cup的资源的,谁先抢到就先执行谁的。所以对于执行结果来说,其实是随机的,你没法确实会先执行谁的。如果要确保t先执行,可以在t.start()后,加上t.join()就会等t先执行完再执行main的线程。建议可以看下java多线程编程核心技术
bichir
2016-10-22
打赏
举报
回复
3楼说得对,线程是异步的。这个代码中执行结果不是唯一的,有可能是1000,有可能是2000。因为你不知道当主线程执行到print时子线程有没执行完。有可能执行完了,也可能没执行完。如果你在print上面用个sleep停1,2钟你会发现结果会是2000.
yannsPeng
2016-10-22
打赏
举报
回复
同求为什么debug的时候测试的结果和直接跑出来的结果不一样?
yannsPeng
2016-10-22
打赏
举报
回复
yannsPeng
2016-10-22
打赏
举报
回复
没看完代码,我才是全局变量和局部变量的原因
yangzhen0126
2016-10-21
打赏
举报
回复
引用 3 楼 爱笑容下的悲伤的回复:
你创建的线程还没执行完,就已经执行到了tt.m2()
能详解吗?两个方法都被锁定了,不是必须等一个方法执行完才能执行另一个吗?即使先执行主线程也应该是2000啊
爱笑容下的悲伤
2016-10-21
打赏
举报
回复
你创建的线程还没执行完,就已经执行到了tt.m2()
yangzhen0126
2016-10-20
打赏
举报
回复
引用 1 楼 NewMoons 的回复:
拜托能把代码发上来么?
代码: package Thread; public class TT implements Runnable { int b = 100; public synchronized void m1() throws Exception{ //Thread.sleep(2000); b = 1000; Thread.sleep(5000); System.out.println("b = " + b); } public synchronized void m2() throws Exception { Thread.sleep(2500); b = 2000; } public void run() { //System.out.println("Thread starts!"); try { m1(); } catch(Exception e) { e.printStackTrace(); } } public static void main(String[] args) throws Exception { TT tt = new TT(); Thread t = new Thread(tt); t.start(); tt.m2(); System.out.println(tt.b); } }
NewMoons
2016-10-20
打赏
举报
回复
拜托能把代码发上来么?
Android应用程序消息处理机制
Android应用程序与传统的PC应用程序一样,都是消息驱动的。也就是说,在Android应用程序主
线程
中,所有函数都是在一个消息循环中执行的。Android应用程序其它
线程
,也可以像主
线程
一样,拥有消息循环。Android应用程序主
线程
是一个特殊的
线程
,因为它同时也是UI
线程
以及触摸屏、键盘等输入事件处理
线程
。主
线程
对消息循环很敏感,一旦发生阻塞,就会影响UI的流畅度,甚至发生ANR
问题
。这个PPT讲Android应用程序
线程
消息循环原理,主要涉及到Handler和Looper两个类,以及根据消息循环的不同使用场景,总结出三种
线程
使用模型。掌握Android应用程序消息处理机制,有助于我们熟练地使用同步和异步编程,提高程序的运行性能
关于多
线程
对
程序执行
时间的影响
多
线程
真的能加速程序的执行吗? 假设有以下一个任务:读取一个文件,从文件中搜索指定的单词,统计个数。用以下两种方式完成: 1.开两个
线程
,一个
线程
负责读取文件,读取一个单词后扔给另一个
线程
,另一个
线程
负责检查这个单词是否匹配指定的单词。 2.只用一个
线程
,边读文件,读完一个单词以后,匹配这个单词,匹配出结果以后再读下一个单词。 两段程序的代码如下: 多
线程
程序:(文本文件用的是我在申请的
Windows进程常用DLL模块注入技术
课程结合多种Windows进程常用DLL注入技术。远程
线程
注入APC注入,异步调用过程,向目标
线程
插入待执行任务从而完成注入。窗口消息注入,指定窗口进程注入,与全局钩子注入类似。环境块注入,获取进程上下文信息,直接性修改
程序执行
流程完成注入。进程入口点注入,在程序初始化的时机前将dll模块文件注入至目标主
线程
。进程调试级注入,涉及调试器相关功能调用知识点dll模块重定位内存注入,模拟操作系统加载PE文件方式,直接将dll文件内存数据写入目标进程并执行。导入表注入,涉及PE相关知识点,增加区段,移动导入表,增加导入表、增加导出函数,修复表项数据等。内核驱动级Dll模块注入技术,内核驱动入门扩展。
多
线程
(一):创建
线程
和
线程
的常用方法
一:为什么要学多
线程
应付面试 :多
线程
几乎是面试中必问的题,所以掌握一定的基础知识是必须的。 了解并发编程:实际工作中很少写多
线程
的代码,这部分代码一般都被人封装起来了,在业务中使用多
线程
的机会也不是很多(看具体项目),但是作为一个高级程序员如果不会多
线程
是说不过去的。 二:进程与
线程
进程 进程是资源(CPU、内存等)分配的基本单位,它是
程序执行
时的一个实例。程序运行时系统...
如何保证多
线程
的顺序执行
多
线程
情况下由于会有CPU在不同
线程
之间的来回切换,各个
线程
的执行结果会产生交叉 。 举个例子:现有T1、T2、T3、主
线程
四个
线程
,如何安照T1执行完才执行T2、T2执行完才执行T3、T3执行完最后执行主
线程
才结束? 答案:使用join()方法,让其他
线程
等待。使用join的
线程
会独占执行资源,直到使用完毕,其它
线程
才能获取执行权。 代码示例如下: public class Joi...
Java SE
62,616
社区成员
307,307
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章