两个线程(两个线程并发执行以下代码,假设a是全局变量)

dylinchen 945 2022-12-11

本文目录一览:

如何让两个线程交替运行

最近在学习研究多线程,还有异步编程方面的知识,结合自己做的项目,遇到这样一个问题:

写了一个程序,它是个控制台程序,会一直运行直到程序关闭,我想用线程实现的方法是通过一个线程每过五分钟或者一分钟,将这一段时间控制台上显示的内容写入txt里面,保存下来,但是写入的时候,控制台程序还在运行,到下一个一分钟后,在将第二个一分钟的内容写入txt里面保存下来。

大概过程是这样:比如在控制台程序他会一直输入1,2,3,4,5,,,,,N,一分钟后,比如写到60,这时候就将1到60写入到txt文件中,不能影响程序的运行,等第二个一分钟过后,比如写到120,就将61到120写入txt文件中,一直延续下去

这个应该如何实现,我个人认为要用两个线程交替工作,一开始线程1工作,一直监视程序运行,一分钟后线程1将数据写入文本文件,这时候线程2开始监视程序运行,一分钟后将数据写入文本,不然我觉得一个线程写会漏掉数据。

大家觉得可行吗,有实现的代码就更好了。之前一直没接触过多线程编程问题,有点无处下手的感觉。

用一个变量专门标记已经写入的数据,比如产生数据线程产生了0-60的数据,那另以个写入线程开始工作,把60保存为标记变量,下一次开始写入的时候就从61开始。

java中两个线程为什么会交替执行?

java虚拟机采用抢占式调度模型,是指优先让可运行池中优先级高的线程占用CPU,如果可运行池中的线程优先级相同,那么就随机选择一个线程,使其占用CPU。处于运行状态的线程会一直运行,直至它不得不放弃CPU。

一个线程会因为以下原因而放弃CPU。

1

java虚拟机让当前线程暂时放弃CPU,转到就绪状态,使其它线程获得运行机会。

2

当前线程因为某些原因而进入阻塞状态

3

线程结束运行

需要注意的是,线程的调度不是跨平台的,它

不仅仅取决于java虚拟机,还依赖于操作系统。在某些操作系统中,只要运行中的线程没有遇到阻塞,就不会放弃CPU;在某些操作系统中,即使线程没有遇到阻塞,也会运行一段时间后放弃CPU,给其它线程运行的机会。

java的线程调度是不分时的,同时启动多个线程后,不能保证各个线程轮流获得均等的CPU时间片。

随机两个字是关键

,导致同样优先级的thread在访问相同对象的时候存在风险,所以java后来才引入了synchonized

关键字

2.jpg


什么是双线程?

纠正下你说的,应该是超线程技术 2003 年,Intel在自家的至强上应用了新的技术:超线程技术, 超线程技术是在一颗CPU同时执行多个程序而共同分享一颗CPU内的资源,理论上能像两颗CPU一样在同一时间执行两个线程,这样,处理器需要多加入一个逻辑处理单元,而其余部分如整数运算单元(ALU)、浮点运算单元(FPU)、二级缓存(L2 Cache)则保持不变,这些部分是被分享的。 虽然采用超线程技术能同时执行两个线程,但它并不像两个真正的CPU那样,每个CPU都具有独立的资源。当两个线程都同时需要某一个资源时,其中一个要暂时停止,并让出资源,直到这些资源闲置后才能继续。因此超线程的性能并不等于两颗CPU的性能。 双内核处理器因为具有两个完整的内核,所以同时可以进行两个整数或者两个浮点运算,这样极大的提高了系统的利用效率,从而推动了系统性能的提升。所以还是双核好一点

什么是双线程

双线程就是有两个线程构成的,每一个线程都是进程中的一条执行路径。

线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

在Unix System V及SunOS中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程。

扩展资料

线程是独立调度和分派的基本单位。线程可以为操作系统内核调度的内核线程,如Win32线程;由用户进程自行调度的用户线程,如Linux平台的POSIX Thread;或者由内核与用户进程,如Windows 7的线程,进行混合调度。

同一进程中的多条线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和信号处理等等。但同一进程中的多个线程有各自的调用栈(call stack),自己的寄存器环境(register context),自己的线程本地存储(thread-local storage)。

一个进程可以有很多线程,每条线程并行执行不同的任务。

参考资料来源:百度百科-线程

如何实现两个线程的同时执行

线程名其实是一个地址,所以你要开200个线程,就可以做两百次循环,就可以了CreateThread()的返回HANDLE报存在一个数组里就可以了

HANDLE

hThread[200];

for(int

i

=

0;i200;

i++)

hThread[i]

=

CreateThread(NULL,0,程序名,NULL,0,NULL);

这样就可以了


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java网络编程之UDP实现原理解析
下一篇:微信小程序设计规范尺寸(微信小程序设计要求)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~