本文的目的是介绍Android中Thread.currentThread的详细情况,特别关注。getId的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解Android
本文的目的是介绍Android中Thread.currentThread的详细情况,特别关注。getId的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解Android中Thread.currentThread的机会,同时也不会遗漏关于$ .ajax()和$ .get()和$ .load()之间的区别、Android Java runOnUiThread()、Android中Thread.currentThread()getId()和Process.myTid()之间的区别、Android中的新Thread(task).start()VS ThreadPoolExecutor.submit(task)的知识。
本文目录一览:- Android中Thread.currentThread()。getId()和Process.myTid()之间的区别(thread.currentthread()和this)
- $ .ajax()和$ .get()和$ .load()之间的区别
- Android Java runOnUiThread()
- Android中Thread.currentThread()getId()和Process.myTid()之间的区别
- Android中的新Thread(task).start()VS ThreadPoolExecutor.submit(task)
Android中Thread.currentThread()。getId()和Process.myTid()之间的区别(thread.currentthread()和this)
众所周知
myTid() -
返回调用线程的标识符,该标识符与setThreadPriority(int,int)一起使用。
但是我发现Thread.currentThread().getId()
不等于Process.myTid()
。因此,我猜前者是JVM版本的线程ID,后者是Linux版本的线程ID。
我对吗?如果是这样,为什么Java会创建自己的线程ID而不使用Linux线程ID?
更新:
经过进一步研究并阅读了android的源代码,我有了新的认识:
Process.myTid()
是与平台(OS)相关的操作,Process.setThreadPriority()
在android的本机级别源中也是如此,它们都调用系统调用来实现目标。
但是java是一种与平台无关的语言,java并不强制主机os需要“
tid”或getTid()
方法,因为另一个os可以通过字符串键(仅作为示例,:)来标识其线程。然后,java用自己的方式标识其线程,在java作用域中分配一个唯一的线程ID,如果Java提供了像这样的静态apiProcess.setThreadPriority()
,则Java作用域ID肯定是一个参数,但是我们不需要,因为我们可以通过调用来实现线程对象方法setPriority(intpriority)
。
欢迎任何评论。
更新:
答案都是正确的。但是法登的评论使我更加清楚。谢谢你们。
答案1
小编典典我相信Java环境中有两种类型的线程:
- 本机线程: 由托管操作系统管理。
- Java线程: 由JVM管理并与本机线程通信。
$ .ajax()和$ .get()和$ .load()之间的区别
$.ajax()
和$.get()
和有$.load()
什么区别?
在哪个条件下使用哪个更好?
Android Java runOnUiThread()
我一直在弄乱runOnUiThread方法。如果我只是在活动中创建一个方法:
public void Test(){ runOnUiThread(new Runnable() { public void run() { Log.v("mainActivity", "test"); } }); }
我注意到该可运行对象仅运行一次。但是,这不是问题。我想知道的是,如果我完全遗漏了某些东西,并且它在后台执行了某些操作,当我多次执行该方法时,它将导致帧速率下降。
答案1
小编典典这是Activity.runOnUiThread(Runnable)的全文:
public final void runOnUiThread(Runnable action) { if (Thread.currentThread() != mUiThread) { mHandler.post(action); } else { action.run(); }}
该方法的主体是在你的后台线程仍然执行,类mHandler
android.os.Handler实现了的Runnable内部队列中的发布到它,所以,除非你正在做的工作,堵在了Runnable(这是一个
很大的 不不上(UI线程)或在短时间内调用此方法一千次以上,您应该不会看到任何区别。
现在,如果您正在调用Handler.postAtFrontOfQueue(Runnable),那么就会出现问题,因为您的Runnable本质上是“
插队
”。在这种情况下,这可能会导致结结,因为正在执行您的Runnable而不是需要进行的任何UI更新(如滚动)。
请注意,您只 需要 在UI线程上运行UI更新,例如在View上调用任何方法(因此称为“ UI
Thread”以及该方法的存在原因)或文档明确指出需要在其上运行的任何操作。 UI线程。否则,如果您已经在使用后台线程,则没有真正的理由离开它。
Android中Thread.currentThread()getId()和Process.myTid()之间的区别
众所周知
myTid() -
返回调用线程的标识符,该标识符与setThreadPriority(int,int)一起使用。
但是我发现Thread.currentThread().getId()
不等于Process.myTid()
。因此,我猜前者是JVM版本的线程ID,后者是Linux版本的线程ID。
我对吗?如果是这样,为什么Java会创建自己的线程ID而不使用Linux线程ID?
更新:
经过进一步研究并阅读了android的源代码,我有了新的认识:
Process.myTid()
是与平台(OS)相关的操作,Process.setThreadPriority()
在android的本机级别源中也是如此,它们都调用系统调用来实现目标。
但是java是一种与平台无关的语言,java并不强制主机os需要“
tid”或getTid()
方法,因为另一个os可以通过字符串键(仅作为示例,:)来标识其线程。然后,java用自己的方式标识其线程,在java作用域中分配一个唯一的线程ID,如果Java提供了像这样的静态api
Process.setThreadPriority()
,则Java作用域ID肯定是一个参数,但是我们不需要,因为我们可以通过调用来实现线程对象方法setPriority(int
priority)
。
欢迎任何评论。
更新:
答案都是正确的。但是法登的评论使我更加清楚。谢谢你们。
Android中的新Thread(task).start()VS ThreadPoolExecutor.submit(task)
在我的Android项目中,我有很多地方需要异步运行一些代码(Web请求,对db的调用等)。这不是长时间运行的任务(最多几秒钟)。到目前为止,我一直在通过创建新线程,将任务传递给新的可运行线程来进行此类操作。但是最近我读了一篇有关Java中线程和并发的文章,并且了解到为每个任务创建一个新的Thread并不是一个好的决定。
所以现在我ThreadPoolExecutor
在我的Application
课堂上创建了一个包含5个线程的。这是代码:
public class App extends Application {
private ThreadPoolExecutor mPool;
@Override
public void onCreate() {
super.onCreate();
mPool = (ThreadPoolExecutor)Executors.newFixedThreadPool(5);
}
}
而且我还有一种方法可以将Runnable任务提交给执行者:
public void submitRunnableTask(Runnable task){
if(!mPool.isShutdown() && mPool.getActiveCount() != mPool.getMaximumPoolSize()){
mPool.submit(task);
} else {
new Thread(task).start();
}
}
因此,当我想在代码中运行异步任务时,我得到的实例,App
并调用submitRunnableTask
将可运行对象传递给它的方法。如您所见,我还检查线程池中是否有空闲线程来执行任务,否则,我将创建一个新线程(我不认为会发生这种情况,但是无论如何……我不会希望我的任务排在队列中并降低应用速度)。
在onTerminate
应用程序的回调方法中,我关闭了池。
所以我的问题是:这种模式是否比在代码中创建新线程更好?我的新方法有什么优点和缺点?会导致我尚不了解的问题吗?您能建议我一些比这更好的方法来管理我的异步任务吗?
PS:我在Android和Java方面有一定的经验,但是我并不是一名并发专家。)因此,在某些问题上可能有些方面我不太了解。任何建议将被认真考虑。
我们今天的关于Android中Thread.currentThread和。getId的分享已经告一段落,感谢您的关注,如果您想了解更多关于$ .ajax()和$ .get()和$ .load()之间的区别、Android Java runOnUiThread()、Android中Thread.currentThread()getId()和Process.myTid()之间的区别、Android中的新Thread(task).start()VS ThreadPoolExecutor.submit(task)的相关信息,请在本站查询。
本文标签: