Tag: multithreading

了解join()方法示例

Java线程join()方法让我感到困惑。 我有以下例子 class MyThread extends Thread { private String name; private int sleepTime; private Thread waitsFor; MyThread(String name, int stime, Thread wa) { … } public void run() { System.out.print(“[“+name+” “); try { Thread.sleep(sleepTime); } catch(InterruptedException ie) { } System.out.print(name+”? “); if (!(waitsFor == null)) try { waitsFor.join(); } catch(InterruptedException ie) { } System.out.print(name+”] “); […]

什么是java中的条件变量?

Q1。 什么是Java中的condVar? 如果我看到下面的代码,条件变量是否必须在’ mutex.acquire() ‘和’ mutex.release() ‘块中? public void put(Object x) throws InterruptedException { mutex.acquire(); try { while (count == array.length) notFull.await(); array[putPtr] = x; putPtr = (putPtr + 1) % array.length; ++count; notEmpty.signal(); } finally { mutex.release(); } } 我有三个线程myThreadA , myThreadB , myThreadC运行调用相同的函数commonActivity() ,它触发函数myWorkReport(),例如 public void myWorkReport(){ mutexMyWork.acquire(); try{ while(runMyWork){ doWork(); conditionMyWork.timedwait(sleepMyWork); } […]

无状态会话bean中的multithreading?

EJB 3.0规范不允许无状态会话bean的业务方法创建新线程。 这是为什么? 创建仅执行原始计算并且从不调用应用程序服务器的其他工作线程有什么问题? 比如说,我的会话bean实现了一个允许用户上传图像的服务,而业务方法对这些图像进行了cpu密集型图像处理。 那么即使机器有8个或更多核心,它也只能使用一个cpu核心来完成这项工作? 如果我利用第三方图像处理库,在内部创建工作线程,我也会违反EJB规范,即使该库和这些线程根本与EJB容器无关。 这似乎不对。 如果我忽略EJB规则并仍然创建一些工作线程来进行cpu密集处理会发生什么? 当然这些线程永远不会触及任何app服务器对象,bean线程会在返回之前加入它们。 还能发生什么坏事吗?

当我使用offer和poll进行访问时,LinkedList是否是线程安全的?

我有一个链表samples : protected LinkedList samples = new LinkedList(); 我将元素添加到线程1中的列表,如下所示: this.samples.offer(data); 我正在第二个线程中从中检索元素,如下所示: public RawDataset retrieveSample() { return this.samples.poll(); } 这会被认为是线程安全的吗? 即使线程1和2都在修改列表,它们只在列表的头部或尾部专门执行,对吧? 如果不是,任何人都可以指向我在Java API中的一个类与poll / offer并且肯定是线程安全的吗? 先谢谢你。 BTW: Collections.synchronizedList(new LinkedList())不允许我访问offer / poll 。

multithreading读取大量文件

我仍在围绕Java中的并发性工作。 我理解(如果您订阅了OO Java 5并发模型),您可以使用run()或call()方法(分别)实现Task或Callable ,并且您应该将尽可能多的实现方法并行化。可能。 但我仍然不理解Java中并发编程的固有内容: 如何为Task的run()方法分配适当数量的并发工作? 作为一个具体的例子,如果我有一个I / O绑定的readMobyDick()方法,它将Herman Melville的Moby Dick的全部内容从本地系统上的文件读入内存。 我只想说我希望这个readMobyDick()方法是并发的并由3个线程处理,其中: 线程#1将书籍的前1/3读入内存 线程#2将书籍的第二个1/3读入内存 线程#3将书的最后1/3读入内存 我是否需要将Moby Dick分成三个文件并将它们分别传递给自己的任务,或者我只是从实现的run()方法中调用readMobyDick()并且(不知何故) Executor知道如何打破其中的工作线程。 我是一个非常直观的学习者,因此非常感谢任何正确方法的代码示例! 谢谢!

如何创建守护程序线程? 什么?

我无法理解守护程序线程的用法和目的。 它们适用于什么? 我该如何使用它们? 此外,我试图创建守护进程,但我不能。 class Evil implements Runnable { public static void main(String[] arg) throws Exception { Thread t = new Thread(new Evil()); t.start(); Thread.sleep(1000); t.setDaemon(true);//no success, error! } public void run() { try { Thread.sleep(1000); System.out.println(“How would it be Evil!?”); Thread.sleep(1000); } catch (Exception e) { } } } 这是我到目前为止所尝试的,但它没有正常工作。

从辅助线程在主线程上运行代码?

这是一个普通的Java问题,而不是Android首先关闭的问题! 我想知道如何在主线程上运行代码,从辅助线程的上下文。 例如: new Thread(new Runnable() { public void run() { //work out pi to 1,000 DP (takes a while!) //print the result on the main thread } }).start(); 那种事情 – 我意识到我的例子有点差,因为在Java中你不需要在主线程中打印出来的东西,而且Swing也有一个事件队列 – 但是你可能需要的通用情况在后台线程的上下文中,在主线程上运行说一个Runnable。 编辑:为了比较 – 这是我在Objective-C中如何做到这一点: dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0UL), ^{ //do background thread stuff dispatch_async(dispatch_get_main_queue(), ^{ //update UI }); }); 提前致谢!

从Java中的synchronized上下文调用Thread.sleep()

我已经读过Thread.sleep()将暂停当前运行的线程指定的时间,然后它返回到runnable状态,等待轮到它运行。 此外,如果从synchronized上下文调用, sleep()不会释放它所持有的锁。 所以我想知道什么时候会释放锁。 如果线程处于hibernate状态,永远不会有机会运行,那么它将始终保持锁定自身,然后其他线程如何进入同步方法/块。 我不确定我是否在问有效的问题。 但请帮帮我。

如何确保Java线程在不同的核心上运行

我正在用Java编写一个multithreading应用程序,以提高顺序版本的性能。 它是0/1背包问题的动态编程解决方案的并行版本。 我有一个Intel Core 2 Duo,在不同的分区上同时使用Ubuntu和Windows 7 Professional。 我在Ubuntu中运行。 我的问题是并行版本实际上需要比顺序版本更长的时间。 我想这可能是因为线程都被映射到同一个内核线程或者它们被分配到同一个内核。 有没有办法确保每个Java线程映射到一个单独的核心? 我已经阅读了有关此问题的其他post,但似乎没有任何帮助。 这是KnapsackThread类(扩展Thread)的main()和run()的结束。 请注意,我使用slice和extra来计算myLowBound,myHiBound确保每个线程不会在dynProgMatrix的域中重叠。 因此没有竞争条件。 dynProgMatrix = new int[totalItems+1][capacity+1]; for (int w = 0; w<= capacity; w++) dynProgMatrix[0][w] = 0; for(int i=0; i<=totalItems; i++) dynProgMatrix[i][0] = 0; slice = Math.max(1, (int) Math.floor((double)(dynProgMatrix[0].length)/threads.length)); extra = (dynProgMatrix[0].length) % threads.length; barrier = new CyclicBarrier(threads.length); for (int i […]

如何在java中指定的时间延迟后启动一个线程

我已经在ServletContextListener中调用了一个方法作为线程..现在根据我的需要,我必须将线程延迟1分钟,然后开始执行线程中调用的方法,但我无法做到这一点,因为我是非常新的… 这是我的代码…… public class Startup implements ServletContextListener { @Override public void contextDestroyed(ServletContextEvent sce) { } public void contextInitialized(ServletContextEvent sce) { // Do your startup work here System.out.println(“Started….”); //captureCDRProcess(); new Thread(new Runnable() { @Override public void run() { captureCDRProcess(); } }).start(); } 请帮帮我..先谢谢..