- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在我的代码中我正在使用
Thread.currentThread().sleep(sleepTime);
在代码的主要(非 Thread 对象)部分。
它看起来工作正常,但我担心可能会有一些隐藏的陷阱,以后会咬我的屁股。
有没有更好的方法让您的主进程停留一段时间?或者这是规定的方法?
编辑:
回答我为什么这样做......
我有一个通过 HTTP 或 FTP 连接到远程主机并执行操作的进程。
换句话说...
东西...
连接到远程...
用远程连接做事...
关闭连接...
更多内容...
必要时重复。
我发现在非常非常罕见的情况下,连接会直接进入 la la land。它不会失败,不会抛出任何异常,它只是消失了。而且它是阻塞的,所以没有内联方式来设置计时器。
所以,我的解决方案是这样做......
东西...
开始新的线程并在其中连接...
在 MAIN 进程(不在生成的线程中)中使用计时器进入无限循环并等待
a) 连接线程完成它的任务并将一些标志设置为“完成”
或
b) 等待一些预设的时间,如果连接线程没有报告它已完成,则杀死它并继续。
是在主进程中,我打算 hibernate 一段时间,醒来,看看MAX_WAIT_TIME是否超时。如果没有,回去 sleep 再等一会儿。
这似乎(在处理器上)比坐在标准的 while 循环中更有效,因为这确实会干扰连接线程执行它需要做的事情的业务。
我想我的问题真的是……这种方法有什么不安全的地方吗?我从答案中看到,鉴于我正在做的事情,看起来好像没有。也许我应该问是否有更标准化的方法?
最佳答案
你在写什么样的应用程序?这很少是个好主意,如果您正在编写客户端 GUI,这尤其是是个坏主意 - 当线程处于 hibernate 状态时,它不会响应。
如果您能提供更多说明需要暂停的原因以及您正在编写的应用程序类型,那将会有所帮助。
另一件事 - 你的电话应该是:
Thread.sleep(sleepTime);
通过 currentThread()
调用它使它看起来像一个实例方法,但它不是 - 它只是一个普通的静态方法。您不能让任何其他线程 hibernate 。
您应该看看您的 IDE 是否有一个选项可以通过引用调用静态方法生成警告或错误 - 它会导致误导性代码(像这样)。
关于java - 在我的主代码中使用 Thread.currentThread.sleep() 有什么危险吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/640464/
我见过许多具有如下所示的线程过程的示例。 private void ThreadProc() { while (serviceStarted) {
当前Thad.sleep的实现是:。currentThread是native方法。在多核系统中,我们可以同时运行多个线程。。那么当前的主题是如何决定的呢?
当前Thad.sleep的实现是:。CurrentThread是本机方法。在多核系统中,我们可以同时运行多个线程。。那么当前的主题是如何决定的呢?
我有一个面向全局市场的应用程序,需要本地化。在开发过程中,我遇到了一些问题,即使我更改了语言环境,我的附属程序集似乎也从未被选中。经过一些研究,我现在明白了为什么会这样,并且能够通过在代码中设置 Cu
我试图通过为它们分配名称来识别一些线程(属性:System.Threading.Thread.CurrentThread.Name),但后来我意识到我可以使用 System.Threading。线程.
我认为Thread对象就像是带有名称和静态Thread.CurrentThread()的抽象对象,就像访问Thread对象的方式一样。显然,这是错误的假设。。是这样的吗?
我认为Thread对象就像是带有名称和静态Thread.CurrentThread()的抽象对象,就像访问Thread对象的方式一样。显然,这是错误的假设。。是这样的吗?
我有一个 Runnable 队列,它在指定线程中一个一个地调用。 val queue = LinkedBlockingQueue Unit>() val queueThread = thread {
我想从方法currentThread()中的doc开始: Returns a reference to the currently executing thread object. @return t
有一个名为Data的类,它被称为我的其他类。 Data 类被许多线程访问,我想在每个线程上存储一些信息。具体来说,Data 有一个名为 name(String) 的实例,我想将此 name 存储到创建
在我的调试器上花费了太多时间之后,我偶然发现了一些我还不清楚的有趣的东西。我希望有更多 Java 经验的人来解释和确认这一点: 我没有每次都使用Thread.currentThread().isInt
我可以做 ConcurrentHashMap存储线程的数据并使用 Thread.currentThread()取回它?我检查了Java源码,发现currentThread()是本地的并且 equals
在下面的代码中: ThreadStart ts = new ThreadStart((MethodInvoker)delegate { executingThr
我有一个错误报告,其中 double.Parse(input) 在输入 "0.69803923368454" 时抛出以下异常: FormatException: Unknown char: . Sys
在 .NET BCL 中,有一个 CurrentThread 和一个 ProcessThread 对象。这些有什么区别? 谢谢 最佳答案 这是设计 .NET 2.0 时 SQL Server 项目的后
谁能解释一下[NSThread currentThread]返回值的含义? NS日志 NSLog(@"%@", [NSThread currentThread]); 结果 {name = (null)
你能告诉我 Thread.currentThread().getContextClassLoader() 和 TestServlet.class.getClassLoader() 之间的区别是什么,不
Thread.currentThread() 是一个static 方法,它提供对当前正在执行的 Thread 的引用(基本上是对“this”线程的引用)。 在静态方法中访问非静态成员(尤其是 this
在较旧的 asp.net 项目中,我们通常在 Application_BeginRequest - 处理程序 (Global.asax) 中设置语言,如下所示: System.Threading.Th
我可以制作 Dictionary存储线程的数据并使用 Thread.CurrentThread 检索它? 最佳答案 可以,但您还需要同步(因为 Dictionary 不是线程安全的)。 备选方案: T
我是一名优秀的程序员,十分优秀!