Tag: multithreading

Android使用Multi thread更快地下载文件

我正在开发一款需要下载大video文件(300-500MB)的应用。 我想知道是否有办法加速使用multithreading下载单个文件。 我在TubeMate这样的应用程序上看到过这种类型的实现,但我对用于实现它的代码一无所知。 我不需要你为我编码:)我只需要一个起点,就像关于这个的文章或教程,tks。

在Java中向线程池中添加新任务之前等待任务完成的最佳方法?

我想使用类似ThreadPoolExecutor的东西来管理在可用线程上运行一堆任务。 这些任务都是相同的类型,但处理不同的帐户。 这些帐户的新任务可以定期添加,我希望它能够检查并且不允许新任务开始,直到同一帐户的旧任务已经完成。 最好的方法是什么? 例 帐户“234”的任务已启动(通过ThreadPoolExecutor.execute()) 帐户“238”的任务已启动(通过ThreadPoolExecutor.execute()) 帐户“234”的新任务已创建但未添加执行,因为第一个“234”任务未完成(检查此问题的最佳方法是什么?) 帐户“238”的任务完成 帐户“238”的新任务启动(通过ThreadPoolExecutor.execute()),因为当前没有为该帐户运行 最好的方法是什么? 只需要在等待/睡眠()中检查Runnable中的某些检查变量,以便完成“234”的第一个任务吗? 或者有更好的解决方案吗?

无法在线程内创建处理程序。 我如何使用Looper.prepare()?

可能重复: 无法在未在AsyncTask for ProgressDialog中调用Looper.prepare()的线程内创建处理程序 我正在开发一种Android服务,试图每x次获取设备IP地址并将其通信到服务器。 我正在使用: Netbeans 7.2 Android SDK Android Google-Api 8 SQLite的 我知道有一些与此问题相关的问题,但没有一个问题能解决我的问题。 正如您在下面的代码中所看到的,我不是要尝试访问服务主线程的UI(好吧,我试过了,但是在我评论该行之后,错误仍然是相同的)。 另一方面,我正在使用AsyncTask ,我认为这是适当的方法。 这是我服务的主要部分: public class ArsosService extends Service { private NotificationManager mNM; private final Messenger mMessenger = new Messenger(new IncomingHandler()); protected DatabaseUtil dbu = null; @Override public void onCreate() { mNM = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); try { dbu = DatabaseUtility.getInstance(this); […]

等待状态的线程对java进程内存的影响

我试图找出最好的方法来确定线程在等待状态对java进程(更具体地说是内存而不是cpu)的影响。 任何可以帮助我弄清楚其影响的建议(可能通过jvisualvm / jconsole等)将不胜感激。 更新 :当前线程数在等待状态下是几百个 – 大约500个。我正在试图找出检查它是否能够/将对旧一代GC产生任何潜在影响的最佳方法。

后台任务片段和“onSaveInstanceState后无法执行此操作”

我在Fragment中有以下AsyncTask(该示例被简化以清楚地显示错误): private class LoginTask extends AsyncTask { @Override protected Void doInBackground(Void… params) { // Do network login return null; } @Override protected void onPostExecute(Void result) { FragmentActivity act = (FragmentActivity) getActivity(); if (act != null && isAdded()) { act.getSupportFragmentManager().beginTransaction() .add(new LoginDialogFragment(), “loginMessage”).commit(); } } } 一旦在任务运行时离开应用程序,我收到了IllegalStateException: Can not perform this action after onSaveInstanceState 。 我想这是因为我在活动的onSaveInstanceState和活动中片段的取消附加之间调用它(或者因为在getActivity()调用和add-fragment调用之后活动未附加。 […]

SurfaceView显示为空,没有任何渲染

我试图从一个线程中将一些形状绘制到SurfaceView上,但没有任何东西被渲染到屏幕上。 我有同样问题的人看过类似的问题,但没有一个答案让我找到了解决方案,在我的具体案例中提出了不同的原因。 我已经创建了一个简化版本的代码来演示这个问题。 渲染由RenderingTestView类处理,该类实现从SurfaceView派生的自定义视图。 渲染线程在RenderingTestView中实现为Runnable: package com.example.renderingtest.app; import android.content.Context; import android.graphics.*; import android.os.Build; import android.util.AttributeSet; import android.view.SurfaceHolder; import android.view.SurfaceView; public class RenderingTestView extends SurfaceView { private SurfaceHolder holder; private Paint paint; private boolean surfaceCreated = false; private Thread videoThread; public RenderingTestView(Context context) { super(context); init_view(context); } public RenderingTestView(Context context, AttributeSet attrs) { super(context, attrs); init_view(context); […]

Java Executor服务并发问题

我正在学习Java中的multithreading。 我正在使用执行程序服务(可调用)因为我需要最终收集我的结果并在进一步之前将它们组合起来。 我实现了multithreading并抛出错误,这是一个type.cast错误。 只是为了让你知道,一旦multithreading工作,并且它不能工作。 对于每个线程返回类型是TreeMap。 而且他们之间没有依赖关系。 这是我的实现: class AbnerCallable implements Callable<TreeMap>{ TreeMap maps; AbnerCallable(TreeMap abs){ maps = abs; } @Override public TreeMap call() throws Exception { TreeMap nerRes = new TreeMap(); AbstractTagger nerTagger = new AbstractTagger(maps); nerRes = nerTagger.tagAbstracts(); System.out.println(“######################One NER is finished.”); return nerRes; } } public TreeMap NERmultithreading(TreeMap abstracts, int thread) throws InterruptedException, […]

scheduleAtFixedRate未在指定的延迟时间启动任务

我使用SchedulerExecuterService在指定的延迟和给定的时间间隔后执行任务。 ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); scheduler.scheduleAtFixedRate(taskThread,60 ,120 ,TimeUnit.SECONDS); 发生的事情是第一次taskThread在延迟60秒后没有启动,它在延迟超过60秒后启动。 而接下来的执行以120秒的正确间隔开始(不完全是120秒,但是有一个非常小的延迟,可以忽略)。 我的查询是为什么第一次执行延迟超过60秒? 由于任务由线程执行,启动时间是否取决于线程优先级? 如何让它以60秒的精确延迟运行? Quartz库怎么样? 这个库能解决我的目的吗(在特定时间运行工作没有任何延迟)? 提前致谢。

multithreadingJBehave日志记录混乱

虽然很清楚如何配置multithreadingjBehave运行, 我不清楚如何处理伐木乱七八糟。 这里有什么选择?

如何使用MAT理解类加载器泄漏以及如何避免它们

好吧,这将是一个很长的问题(我想问很多相关的问题,我觉得卡住了!)。 我花了很多时间试图弄清楚某些事情,但我无法自信地得出结论。 我是性能分析/堆分析的新手,我要求初学者帮助深入研究这些领域。 我发现很难理解这些概念,并按照方法弄清楚事情…… 我们面临的问题是,经过几个小时的执行,我们的应用程序响应时间增加,执行变得如此缓慢,使应用程序停止运行! 我还分析了线程转储,我不敢说没有从中收集到太多信息。 我可以看到一些处于timed_waiting状态的线程,但没有一个被阻塞或者没有看到任何死锁检测。 因此,我们已将搜索转向堆转储分析。 答:我正在使用MAT进行堆转储分析。 我读过一些博客。 根据这些,我试图形成我的结论。 我想validation一下我的理解。 问题:从上图中我们可以看到1和2中有多个相同类型的类加载器。 为什么会这样? 事实上,sun.reflect.DelegatingClassLoader有超过1000个条目。 我无法理解这是什么。 现在,让我们深入研究WebappClassLoader的第一个 B. Q1。 这些是这个类加载器定义/加载的类的列表吗? 正如我们在3中看到的那样,有一个父元素。 这是否意味着这个类加载器总是首先咨询这个父类加载器,并检查它是否由它加载。 如果它的祖先的层次结构不可能加载该类,那么只有它自己加载它? Is this understanding of the hierarchy of class loading correct? 我仍然没有得到Defined类和实例列数的含义? 什么实例? 我的意思是,加载类并不是实例化其对象,不是加载器的工作吗? 那个实例数是多少? 在这种情况下,我们可以看到:WebappClassloader有4361个定义的类和65973个实例。 类似地,URLClassLoader(它的父级)有766个定义的类和37399个实例。 它到底意味着什么? 它是否表明任何Classloader泄漏? 现在,当我深入查看WebappClassloader的第二个实例时,我看到它们具有相同的父级(0x80a887a8),并且由它加载/定义的类列表也几乎相同。 为什么会这样? C.现在,当我在WebappClassloader的第一个实例上执行“GC根路径”时,我们可以看到这一点。 我的理解:很multithreading(从我们的应用程序中产生)引用了加载器。 这是一个糟糕的线程实现问题吗? 我需要找到问题的根本原因,然后我只想进一步解决它。 来自堆转储的其余部分的一些其他观察 ThreadGroupContext和WebappClassloader消耗了大部分堆。 当我深入研究ThreadGroupContext的支配树时,我看到了WeakIdentityMap。 那些是什么? 这个dominatior树实际上向我们展示了什么? 当我们深入了解统治者树中的条目时,我们得到了哪些信息? 具有传出引用的向下钻取视图: 带有传入引用的向下钻取视图:我不明白这一点。 […]