Java线程工作频率

标签 java multithreading

我想在显示“加载动画文本”时加载一些文件。

我用一个线程加载文件,用我的主线程显示动画。

问题是在一些测试中,我注意到我的线程使用的工作时间有时不好以至于我的动画真的被卡住了.

代码示例:这是一个示例,我的代码太长了,但这是我加载文件的代码的主要形式:

for (int i = 0; i < file.size; i++) {
     //Do soem stuff
}

示例:(A = 加载文件线程;B = 文本动画)

A
 B
 B
 B
 B
 B
A
A
A
A
A

我想要什么:

A
 B
A
A
 B
 B
A
A
 B
A
 B
A
 B
A

我的问题是:有没有办法让线程更同时工作?

编辑:

我的代码太长(超过 500 行),但使用简单的代码我得到了同样糟糕的结果:

例子

package thread_test;

public class TestThread extends Thread {


  public TestThread(String name) {
    super(name);
  }

  public void run() {
    for(int i = 0; i < 30; i++)
        System.out.println(this.getName());
  }       
}

主类

package thread_test;

public class Test {

public static void main(String[] args) {

    TestThread t = new TestThread("A");
    TestThread t2 = new TestThread(" B");

    t.start();
    t2.start();

}

}

结果:

A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
 B
 B
 B
 B
 B
 B
 B
 B
 B
 B
 B
 B
 B
 B
 B
 B
 B
 B
 B
 B
 B
 B
 B
 B
 B
 B
 B
 B
 B
 B

如您所见,我遇到了同样的问题,所以如果我们能用给定的代码解决这个问题,我想我也能解决我的问题。

最佳答案

当谈到线程调度时,Java 几乎无法保证:例如,无法保证从线程池中选择线程运行的顺序。

你无法控制调度器,但你可以影响它,例如通过使用

如果线程生命周期如您所描述的那样(即两个线程获得相同的时间但应该更频繁地切换),请尝试添加一些 Thread.yield()到两个线程。

但在大多数情况下,当调度器做奇怪事情时,问题是有一个线程几乎占用了所有 cpu 时间。

关于Java线程工作频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30892878/

相关文章:

python - 使用 Python 和 pymongo 的多线程

java - 使用 ajax 将列表发送到我的 Spring Controller

java - while(true) 和 wait() 或线程 join() 之间有什么区别

C# 线程和 Windows 窗体

java - Spring:@PostConstruct 在 Maven 测试中不会被调用,但如果测试在 IDEA 中运行则工作正常

iphone - Cocos2D-iPhone 中的多线程 OpenGL 编程

C# 创建与处理器一样多的类实例

java - 每个 JSON 可序列化的 Java 对象都可以表示为 Map<String, Object> 吗?

java - 启用 RSA 的简单 Java 聊天 - 不是 PKCS#1 block 类型 2 或零填充

java - Spring 3.2 ehcache 的缓存 NamespaceHandler