多线程输出问题,关于多线程的问题

发布于 科技 2024-06-30
7个回答
  1. 匿名用户2024-01-30

    [1] MyThread 继承自 Thread 类,但 start 方法被你覆盖,[2] 调用你覆盖的 start() 方法,所以它不会生成线程,也不会被调用。

    1] MyRunnable 实现了 runnable 接口。

    2] 但是自定义启动方法不会生成线程,也不会被调用;

    1] NewTread 属于 Thread 类,它只引用方法,不处理方法。

    2] 是调用线程类的 start() 方法,而不是调用 [3] 调用线程类的 start() 方法后,生成一个新线程,然后调用该方法。

  2. 匿名用户2024-01-29

    好吧,让我们简单地说。

    所有资源都由映射到内存地址的指针进行管理。 当编译的**在托管环境中运行时,其所有*可变*资源都受到严格管理并单独保存。 在你的例子中,即使我打开线程 A 10 次让它们一起运行,实际上它们执行的*机器代码*是一样的,区别在于资源不同,有的堆积在内存中,有的被 CPU 从寄存器中取出,有的被扔进文件缓存中, 等(公共资源不计算在内)。

    没有任何人做二手**这回事,线程状态的保存远没有CPU调度和状态恢复那么简单。 从表面上看,其实CPU就是个忙着吃的,按照编译好的**来解释和执行,跑来跑去拿资源、算资源、写资源,本身就没什么可提倡的,一切都是计划好的。

    为什么你经常说你应该注意锁、互斥锁和原子操作,我想你知道这一点。 不管你的A线程现在在哪里,B线程不小心修改了大家在意想不到的时间可以访问的公共资源,这对A来说简直是一场灾难,窃听无非是A根本无法**资源的价值,焦点就会被抢占甚至死卡。

    以我的拙见,看看就知道了。

    刚在一楼见到你的问题。

    锁定是一种保护*可能*意外访问的公共资源的方法;

    每个线程体都有自己的一块土地(内存),当你写线程 thd=new thread(..,系统给它分配了初始内存空间,用来存储一些关于线程本身的信息(比如线程的当前状态等),当然还有很多隐藏的东西是框架管理的,我们看不到的。 当您再次打开线程 B 时,它有自己的空间。

    公共资源本质上是存储在内存中,任何知道内存头的地址以及存储在其中的东西类型的人都可以读写。 锁定是附加要求,在访问此级别的独占检查之前必须通过。 你为什么不滥用公共资源,因为如果你不锁定它,你不知道它什么时候会被谁改变; 在每次访问之前,您的锁将消耗额外的系统资源进行检查。

    当然,锁的种类很多,有的可以让我同时写和读,有的独占的甚至没有办法读,还有更高效的原子运算直接在寄存器中计算,不用链,但同样可以达到一个人“瞬间”垄断的效果。

  3. 匿名用户2024-01-28

    让我们举一个简单的例子。

    假设您的银行卡中有 1,000 美元。

    在你在外面花钱刷卡的同时,其他人也同时向你的账户汇款。

    如果银行的系统没有锁定机制,并且支出和存储同时发生,那么您的帐户余额就会混乱。

    如果你花了500,有人给你发了500没有锁,而且两者同时发生(虽然这个概率极低,但不能排除),那么很有可能你的账户余额是1500或者500,其实你的账户应该还是1000

    刷卡和存储可以看作是两条线,两条线都在争夺你的银行卡余额的公共资源,无论你的账户余额是1500还是500,这取决于两者中哪一个先争夺你账户卡中的余额数据。

    因此,在这种情况下,必须将其锁定,并且只能同时操作一张银行卡余额进行消费和存储。

  4. 匿名用户2024-01-27

    没有一种语言会改变程序员的**,你说的应该是你定义的变量,这取决于你定义的范围,比如一个全局变量,线程可以通过它进行通信,a改b改b会用新数据,b改a会用新数据,没人会回转, 这些是存储而不是 cpu 的东西,而这个全局变量所在的区域是公共资源,如果它没有被锁定,A 改变了这个变量,但它在执行之前被 B 改变了,它肯定不会对 A 起作用,所以子逻辑是混乱的。

  5. 匿名用户2024-01-26

    该程序存在线程同步问题。

    线程同步是一个系统的过程,包含广泛的问题。 多线程编程需要巧妙地使用线程同步机制来解决资源争用、互斥、协调、死锁等各种问题。 如果必须使用多线程,则必须系统地掌握线程同步编程的方法。

    建议先学习一本操作系统教材的多线程章节,了解整个知识脉络(推荐“现代操作系统”,很不错); 我们来了解一下 Windows 在多线程方面提供的线程同步对象和同步 API; 如果您使用的是 VC,请了解 MFC 如何封装线程同步 API。

    当然,你也可以发布**给大家帮忙找出问题所在。

  6. 匿名用户2024-01-25

    可能是程序的三个线程在双核 CPU 上同时运行,偶尔会导致数据冲突。

  7. 匿名用户2024-01-24

    使用 waitforsingleobject 函数? 此函数在调用它时输出返回值,有时它会失败。

相关回答
16个回答2024-06-30

其中,可以使用 threadid 来确定线程操作的数据 ID,可以使用范围内的数据。 例如,threadid=1 操作数据库 ID 1-1000 中的数据,然后在此范围内执行正常的数据库操作。 >>>More

10个回答2024-06-30

执行此操作的简单方法是终止当前线程。

当然,您不仅需要终止当前线程,还需要执行其他业务并弹出表单。 然后需要一个新的委托,在**过程中调用这个委托来终止现成的,以便在线程终止后执行其他服务。 >>>More

14个回答2024-06-30

简单的方法是设置一个关键变量,线程在运行时检测这个变量的值,如果变量的值为false,则表示线程暂停,让线程继续休眠,可以根据自己的需要设置休眠间隔值。 比较复杂的是线程间通信来控制,我想大家已经看过很多了,我就不多说了。网上有很多例子。 >>>More

7个回答2024-06-30

;您只能放弃使用CPU的权利。

13个回答2024-06-30

当电脑运行时,它不仅打开的程序会占用CPU,即使你在电脑上什么都不做,也有很多看不见的后台程序在运行,少则十几个,有时甚至几十个。 杀毒软件、系统监控程序等都会占用CPU,但这只是CPU资源大小的问题。 >>>More