【问题标题】:Difference between User Defined Thread and System Thread (For Sleep Method)用户定义线程和系统线程的区别(对于睡眠方法)
【发布时间】:2011-09-28 16:25:30
【问题描述】:

这是我正在工作的示例

Thread[] TCreate = new Thread[sexDataSize];
    for(int i=0;i<sexData.size();i++)
    {
        final SDISQueryBuilder _qryBulider=qryBulider;
        final String _newQry=_qryBulider.getQueryStringOnSex(sexData.get(i).getName(), baseQry, SDISCommonParam.onSEXID,sdisQueryInfo);
        final int _i = i;
        TCreate[i] = new Thread(new Runnable() {
            public void run()
            {
                groupData.add("GROUPID_"+(_i+1), ((List<Count>) _qryBulider.facetOn_FieldName(_newQry.replace("1028","1046" ), SDISQueryInfo.url3, SDISCommonParam.onGroupID).getValues()));        
            }});
        TCreate[i].setName("GROUPID_"+(_i+1));
        TCreate[i].start();     
    }
    for(int i=0;i<sexData.size();i++)
            while (TCreate[i].isAlive()) Thread.sleep(10);

我需要知道 Thread.sleep(10)TCreate[i].sleep(10) 之间的区别。两者都一样吗?还有其他问题吗?以及我是否正确处理线程。让我知道是否有变化。提前致谢

【问题讨论】:

    标签: java multithreading thread-safety threadpool


    【解决方案1】:

    'Thread.sleep()' 是一个静态方法,这意味着它的执行不依赖于它调用的实例。换句话说,'myThread.sleep()''otherThread.sleep()' 的含义相同,如果这两个对象都是 'Thread' 类的实例

    【讨论】:

    • ...因此,为了避免混淆,永远不应该在对象实例上调用静态方法。
    【解决方案2】:

    无论你给什么对象

    Thread.sleep(millis);
    

    方法同

    Thread.currentThread().sleep();
    

    你不能以这种方式让另一个线程休眠。相反,您需要拥有线程检查或等待的共享资源,并且您的控制线程使该资源不可用。

    【讨论】:

      【解决方案3】:

      Thread.sleep(10) 将使当前正在执行的线程休眠,即不一定是您数组中的线程之一,更有可能是产生其他人查看您的示例的主线程,因为它来自您调用的那个线程它。

      如果您想要实现的是让您的生成进程等到它的所有子进程都完成工作,那么 Java 提供了一种内置机制,即 join 方法。它的作用是使您进行调用的线程等待,直到您调用它的线程完成。如果这确实是您想要实现的目标,请将最后一个 for 循环替换为以下内容:

      for(Thread t : TCreate){ //Consider naming variables with initial lowercase
         t.join();
      //Should be called after it's been started but not until you have started all of them
      }
      //Execution resumes here when all spawned threads have completed their task.
      

      我希望这更清楚。

      【讨论】:

      • 我找不到你。你能更具体地了解join()吗?请举例说明
      猜你喜欢
      • 2023-03-04
      • 2018-08-09
      • 2018-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多