【问题标题】:What exactly does thread priority do in Java [duplicate]Java中的线程优先级究竟做了什么[重复]
【发布时间】:2017-07-25 14:19:48
【问题描述】:

我目前正在开发一个用 java 编写的 android 项目。 我有一个仪表板,可以从 cloudant 数据库中查询数据并将数据呈现在图表上。然而,数据必须在收到时进行处理。
我有 4 个异步任务,它们同时(或应该)处理 doInBackground Override 方法中接收到的数据。进程很慢,我试了一下线

Thread.currentThread().setPriority(Thread.MAX_PRIORITY);

在每个 AsyncTask 中。
但是,4个AsynkTasks似乎都一个接一个地发生,这是由于将线程的优先级更改为最大吗?当一个线程的优先级发生变化时,它是否会停止所有其他线程并只继续一个线程直到它完成?

【问题讨论】:

  • 来自Thread 上的JavaDoc:“每个线程都有一个优先级。优先级较高的线程优先于较低优先级的线程执行。”
  • 即使你改变了优先级,除非它们是非常小的任务,它们仍然应该表现出一定程度的并行性。贴更多代码,看看其他地方是否有错误。

标签: java android-asynctask thread-priority


【解决方案1】:

发件人:https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html

每个线程都有一个优先级。执行具有较高优先级的线程 优先于具有较低优先级的线程。每个线程可能或可能 也不会被标记为守护进程。当代码在某个线程中运行时 创建一个新的 Thread 对象,新线程最初有它的优先级 设置等于创建线程的优先级,并且是一个守护进程 线程当且仅当创建线程是一个守护进程。

(注:此信息是通过在 google 中搜索“java Thread.MAX_PRIORITY”并查看顶部结果找到的)

【讨论】:

  • 好一个!将其格式化为引用,以便我们都可以看到这不是您的意见
【解决方案2】:

From the documentation:

每个线程都有一个优先级。执行具有较高优先级的线程 在 preference 中优先级较低的线程。 ...当代码运行时 某个线程创建了一个新的 Thread 对象,新线程有它的 最初设置的优先级等于创建线程的优先级。

这实际上只是一个提示,告诉调度程序执行线程的大致顺序。它可以并且很可能会忽略您。

如果您已将所有线程的优先级设置为最大值,这实际上与将它们保留为默认值相同。你可能不得不告诉你的老板,如果一切都是最重要的,那么没有什么是最重要的:)

【讨论】:

    猜你喜欢
    • 2015-09-15
    • 1970-01-01
    • 2010-10-27
    • 1970-01-01
    • 2019-03-06
    • 1970-01-01
    • 2015-12-02
    • 2013-09-02
    • 2012-07-23
    相关资源
    最近更新 更多