标签: thread-state

如何检查Thread是否完成执行

我有以下问题:

我想检查(C#)线程是否已完成执行,即线程方法是否已返回.我现在所做的就是打电话Thread.Join(1),但这会延迟1毫秒.有没有办法简单地检查线程是否已完成.检查Thread.ThreadState似乎太麻烦了.

c# multithreading thread-state

33
推荐指数
5
解决办法
13万
查看次数

Java线程状态转换,WAITING到BLOCKED还是RUNNABLE?

SO共识与互联网上几乎每个Java线程状态图之间似乎存在差异; 具体来说,关于 WAITING之后的线程状态转换notify()或被notifyAll()调用...

  • 等待永远不会直接进入RUNNABLE
  • 该线程正在等待直到通知...然后它变为 BLOCKED ...
  • 一旦通知此线程,它将无法运行 ...这 ...阻塞状态.

所以关于SO的共识是:一个线程从调用之后转换WAITING到; 或者; 下图说明了绿色的这种转变.BLOCKEDnotify()notifyAll()

为什么网上的大多数状态图都说明了转换WAITINGRUNNABLE,而不是BLOCKED?红色描绘显示错误的过渡; 我错过了什么吗?

在此输入图像描述

java multithreading thread-state java-threads

28
推荐指数
1
解决办法
9820
查看次数

.NET框架中的线程生命周期

此链接中解释了.NET框架中的线程状态.

我最近在一个网站上看到了这张照片,我想到了几个问题:

在此输入图像描述

  1. OS中的线程生命周期与.NET框架中的线程生命周期不完全一致.有人可以提供与.NET框架中的操作系统状态相匹配的资源吗?

  2. 我们在.NET框架中没有名为Blocked的状态.如果发出I/O请求,线程的状态是什么?

  3. Aborted州的目的是什么?当一个线程调用该Abort()方法时,它将进入AbortRequested状态,并在线程响应中止请求后,它将进入Stopped状态.那么Aborted状态的功能是什么?

.net c# multithreading thread-state

16
推荐指数
1
解决办法
1万
查看次数

Thread.IsAlive和Thread.ThreadState == ThreadState.Running

我用来检查线程的状态if(Thread.IsAlive).表单正在此线程中运行.在执行期间,即使表单保持打开,对Thread.IsAlive的调用似乎也在评估为false.我想要用同样的检查if(Thread.ThreadState==ThreadState.Running).这是正确的方法吗?如果没有,可能的工作是什么?

c# multithreading thread-state

11
推荐指数
1
解决办法
4万
查看次数

async await:是主线程被挂起了吗?

我正在阅读关于async/await关键字的内容,我读到了:

当逻辑流到达等待令牌时,调用线程将暂停,直到调用完成.

好吧,我创建了一个简单的windows forms application,放置了两个标签,一个按钮和一个文本框,我编写了代码:

        private async void button1_Click(object sender, EventArgs e)
        {
            label1.Text = Thread.CurrentThread.ThreadState.ToString();
            button1.Text =  await DoWork();
            label2.Text = Thread.CurrentThread.ThreadState.ToString();
        }

        private Task<string> DoWork()
        {
            return Task.Run(() => {
                Thread.Sleep(10000);
                return "done with work";
            });            
        }
Run Code Online (Sandbox Code Playgroud)

我不明白的是,当我点击按钮时,label1将有文本Running,标签将在10秒后只有相同的文字,但在这10秒钟内,我能够在文本框中输入文字,所以看来主线程正在运行......

那么,async/await是如何工作的呢?

这是书中的"截图": 在此输入图像描述

问候

c# thread-state async-await

7
推荐指数
1
解决办法
3606
查看次数

mysql show processlist 查询显示 state = null

我有一个脚本运行一批非常相似的查询。
所有这些,除了一个,运行没有任何问题。
只有一个查询卡住了。
在“show processlist”中,查询有 state=null
根据文档,show processlist 应该只为“show processlist”线程本身报告“State=null”。

    Server version: 5.0.67 MySQL Community Server (GPL)
    mysql> show processlist;
    +---------+--------+-----------+--------------+---------+------+-------+------------------------------------------------------------------------------------------------------+
    | Id      | User   | Host      | db           | Command | Time | State | Info                                                                                                 |
    +---------+--------+-----------+--------------+---------+------+-------+------------------------------------------------------------------------------------------------------+
    | 3866613 | user   | localhost | db_name      | Query   | 1986 | NULL  | select log_time,log_action,log_action_id,log_object_id, @abcde:=if(log_action='abcde',to_            |
    | 3873414 | root   | localhost | NULL         | Query   |    0 | NULL  | show processlist                                                                                     |
    +---------+--------+-----------+--------------+---------+------+-------+------------------------------------------------------------------------------------------------------+
    2 rows in …
Run Code Online (Sandbox Code Playgroud)

mysql thread-state processlist

6
推荐指数
1
解决办法
5665
查看次数

我怎样才能获得程序的状态?

我正在观察一个程序,想要杀死它,如果它在状态"等待:执行"一段时间.

以下是Process Explorer的屏幕截图:

州:等:执行官

我如何通过代码获得该状态?或者也许可以告诉我某个国家究竟意味着什么?这可以帮助我找到正确的查询来解决我的问题.

c c++ winapi thread-state

6
推荐指数
1
解决办法
479
查看次数

java threadump意义"等待条件"

我有一个应用程序的threaddump,显示3个线程如下.

===============

"http-443-11" daemon prio=10 tid=0x00000000473bc800 nid=0x3590 waiting on condition [0x0000000061818000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <0x00000007612a3880> (a java.util.concurrent.Semaphore$NonfairSync)

"http-443-4" daemon prio=10 tid=0x00000000451f6000 nid=0x243a waiting on condition [0x0000000055354000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <0x00000007612a3880> (a java.util.concurrent.Semaphore$NonfairSync)

"http-443-7" daemon prio=10 tid=0x000000004602e000 nid=0x2974 waiting on condition [0x000000005e6e7000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <0x00000007612a3880> (a java.util.concurrent.Semaphore$NonfairSync)
Run Code Online (Sandbox Code Playgroud)

===============

"等待条件[]"有什么意义?[]中的数字有什么意义?

java thread-dump thread-state conditional-statements

6
推荐指数
1
解决办法
4254
查看次数

Java线程的状态到底是什么意思?

我正在Android Studio中学习该工具,获取线程转储,如下所示:

获取线程转储

我注意到每个线程的状态都不同,

在此处输入图片说明

我可以看到有runnablesleepingwaiting。我深入线程堆栈,大多数这样的线程堆栈,

"<61> RxComputationScheduler-3@830064517520" daemon prio=5 waiting
    java.lang.Thread.State: WAITING
        at java.lang.Object.wait(Object.java:-1)
        at java.lang.Thread.parkFor(Thread.java:1205)
        at sun.misc.Unsafe.park(Unsafe.java:325)
        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2017)
        at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1050)
        at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:778)
        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1035)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1097)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
        at java.lang.Thread.run(Thread.java:841)
Run Code Online (Sandbox Code Playgroud)

我很困惑,他们这样做都停止Object.wait,但线程的状态可以是runnablesleepingwaiting

这是另一个状态线程的堆栈。

RUNNABLE

<53> RxSchedulerPurge-1@830057651944" daemon prio=5 runnable
  java.lang.Thread.State: RUNNABLE
      at java.lang.Object.wait(Object.java:-1)
      at java.lang.Thread.parkFor(Thread.java:1205)
      at sun.misc.Unsafe.park(Unsafe.java:325)
      at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:197)
      at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2056)
      at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1062)
      at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:778)
      at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1035)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1097)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
      at java.lang.Thread.run(Thread.java:841)</code>
Run Code Online (Sandbox Code Playgroud)

TIMED_WAITING …

java performance android thread-dump thread-state

4
推荐指数
1
解决办法
703
查看次数

IO完成后的Windows线程切换延迟 - 微秒或毫秒

我试图确定IO操作完成时切换线程的大致时间延迟(Win 7,Vista,XP).

我(我想)知道的是:

a)线程上下文切换本身在计算上非常快.(通过速度非常快,我的意思是通常的方式下1毫秒,甚至在1us的-假设一个比较快,卸载机等)

b)循环时间片量子大约为10-15ms.

我似乎无法找到的信息是关于(高优先级)线程变为活动/信号的典型延迟时间 - 例如,通过同步磁盘写入完成 - 并且该线程实际上再次运行.

例如,我至少读过一个地方,所有非活动线程都保持睡眠状态,直到~10ms系统量程到期,然后(假设它们已准备就绪),它们几乎同步地重新激活.但在另一个地方,我读到线程完成I/O操作与激活/发信号并再次运行之间的延迟是以微秒为单位,而不是毫秒.

我的询问背景与从高速摄像机捕获和连续流写入SSD阵列的SSD有关,除非我可以在先前的写入完成后在1ms以内完成新的写入(如果在平均1/10ms),这将是有问题的.

任何有关此问题的信息都将非常受欢迎.

谢谢,大卫

windows data-processing thread-state

1
推荐指数
1
解决办法
884
查看次数