相关疑难解决方法(0)

63
推荐指数
6
解决办法
3万
查看次数

Thread.Sleep(0)和Thread.Yield()之间的区别

由于Java早就有Sleep和Yield,我找到了该平台的答案,但不是.Net的答案

.Net 4包含新的Thread.Yield()静态方法.以前,将CPU移交给其他进程的常用方法是Thread.Sleep(0).

除了Thread.Yield()返回一个布尔值,还有其他性能,OS内部差异?

例如,我不确定Thread.Sleep(0)是否检查其他线程是否准备好运行,然后将当前线程更改为等待状态...如果不是这样,当没有其他线程准备就绪时,Thread.Sleep (0)看起来更糟糕的是Thread.Yield().

.net multithreading

23
推荐指数
2
解决办法
7774
查看次数

Java线程:CPU利用率过高

我正在使用一种服务来读取消息Kafka并将其推入Cassandra.

我正在使用相同的线程架构.

有消息k threads来自Kafka主题.这些写入队列,声明为:

public static BlockingQueue<>
Run Code Online (Sandbox Code Playgroud)

现在有很多线程,比如n写入Cassandra.这是执行此操作的代码:

public void run(){
    LOGGER.log(Level.INFO, "Thread Created: " +Thread.currentThread().getName());
    while (!Thread.currentThread().isInterrupted()) {
        Thread.yield();
        if (!content.isEmpty()) {
            try {
                JSONObject msg = content.remove();
                // JSON
                for(String tableName : tableList){
                    CassandraConnector.getSession().execute(createQuery(tableName, msg));
                }
            } catch (Exception e) {

            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

content 是用于读写操作的BlockingQueue.

我在Thread线程的实现中扩展了类,并且有一定数量的线程继续执行,除非被中断.

问题是,这是使用太多的CPU.这是第一行top命令:

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
46232 vishran+  20   0 3010804 …
Run Code Online (Sandbox Code Playgroud)

java multithreading cpu-usage

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

代码在调试模式下可以正常运行,但是在正常运行时(Eclipse)会停止

我在SO上找到此链接:

代码在正常运行时不起作用,但在调试(日食)中工作

然后在看到答案的同时,Thread.sleep(0)在我的while循环中添加了一个内容,它可以正常工作。

问题是“为什么?”。另外,此问题是否特定于Eclipse

java eclipse multithreading

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

标签 统计

multithreading ×4

java ×3

.net ×1

cpu-usage ×1

eclipse ×1