Tag: multithreading

将连接池与Jedis一起使用

我在rest服务中使用Jedis连接redis服务器。 当我调用Web服务时,我想做jedis.hmget , jedis.exits和hgetALL之类的操作 。 jedis.hmget(“employee:data:” + emp_user_id, “employee_id”).get(0); 我用于redis的配置是: Jedis jedis; JedisShardInfo shardInfo; @PostConstruct public void init() { try { shardInfo = new JedisShardInfo(Config.getRedisHost(), Config.getRedisPort()); shardInfo.setPassword(Config.getRedisPassword()); jedis = new Jedis(shardInfo); jedis.select(2); //jedis.se } catch (Exception e) { logger.error(“Exception in init ——- > ” + e); } } 我知道jedis不是线程安全的。当我一次使用1000个线程来调用服务时,我得到exception作为意外的流结束。 我开始知道jedis pool是线程安全但无法找到它的具体解决方案。 谢谢。 任何帮助,将不胜感激。

线程睡眠时间过长

我写了一个简单的程序,注意到我的线程太快,我无法运行JVisualVM,标记我要监视哪个应用程序,插入并查看线程。 然后我让他们睡了 现在注意到的工具报告它们只是睡觉(或者几乎只是睡觉)。 即使他们工作。 这引出了一个问题:为什么?! new Thread(() -> { while(true) { System.out.println(“not sleeping”); try { Thread.sleep(0,1); } catch (InterruptedException e) { e.printStackTrace(); } } }, “not sleeping!”).start(); 这个线程应该睡眠1纳秒,但是看看JVisualVM是如何报告的: 运行57秒后,它报告5s运行时间,rest时正在睡觉 – 一个错误或我的理解是错误的? 它不仅仅是JVisualVM: $ while true; do jstack 8277 | grep -A 2 not; done [% 20:34:27] “not sleeping!” #10 prio=5 os_prio=0 tid=0x00007f5ea82d1000 nid=0x2078 waiting on […]

IOexception – 读取结束死机 – 在此示例中导致它的原因以及如何修复它 – Java中的multithreading应用程序

这是我在这里发布的问题的扩展 ,虽然这似乎解决了我的问题的一部分,现在我看到IO-Exception read end dead exception 。 我使用的是multithreaded应用程序,其中thread-1 produces随机数,而其他thread-2 consumes它来计算平均值。 一旦平均值达到阈值,我发信号通知thread-1停止产生数字。 这是代码的基本设计。 我收到IO-Exception read end dead exception 。 我想知道为什么会这样,以及如何解决它。 谢谢。 代码如下: import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.PipedInputStream; import java.io.PipedOutputStream; import java.util.Random; import java.util.concurrent.atomic.AtomicBoolean; // class NumGen extends Thread { PipedOutputStream pos; DataOutputStream dos; AtomicBoolean isDone; public NumGen(PipedOutputStream pos,AtomicBoolean isDone){ this.pos=pos; dos=new DataOutputStream(pos); this.isDone=isDone; […]

ExecutorService超时而不阻塞主线程

我想在有时间限制的后台执行一些工作。 问题是,我不想阻止主线程。 天真的实现是拥有两个执行者服务。 一个用于调度/超时,第二个用于完成工作。 final ExecutorService backgroundExecutor = Executors.newSingleThreadExecutor(); final ExecutorService workerExecutor = Executors.newCachedThreadExecutor(); backgroundExecutor.execute(new Runnable() { public void run() { Future future = workerExecutor.submit(new Runnable() { public void run() { // do work } }); try { future.get(120 * 1000, TimeUnit.MILLISECONDS); } catch (InterruptedException e) { logger.error(“InterruptedException while notifyTransactionStateChangeListeners()”, e); future.cancel(true); } catch (ExecutionException […]

GLFW的线程设置

我开始使用新的Lwjgl 3,它使用GLFW进行显示/鼠标/键盘处理,我真的很喜欢它! 然而今天我打了砖头。 我有一个简单的渲染动画,但当我拖动屏幕时,它停止渲染,直到我再次放手。 根据: http : //www.glfw.org/faq.html 问题出现在窗户旁边。 3.5 – 当我移动窗口或调整窗口大小时,为什么我的应用程序会冻结? Windows事件循环被某些操作阻止,例如拖动或调整窗口大小或打开窗口菜单。 这是Windows设计的一部分,GLFW无法更改。 如果您希望在此类操作期间继续渲染,则应从辅助线程渲染。 – http://www.glfw.org/faq.html 我以前在Java中做过multithreading的事情。 但我不确定这种情况下自己的线程是什么。 我应该在单独的线程中使用opengl代码和GLFW代码吗? 我也很难想出一种解决问题的方法。

Java线程在没有关注OSX时进入hibernate状态

我正在编写一个程序来监听系统剪贴板的更改。 侦听器在单独的线程上运行,并在剪贴板的内容发生更改时执行某些操作(例如,写入文件)。 我正在使用ClipboardOwner接口轮询剪贴板,这样当我的程序失去剪贴板的所有权(意味着另一个进程已经修改了剪贴板)时,我的程序中会触发一个事件让我读取更改。 public class OwnershipClipboardListener extends Thread implements ClipboardOwner { private Clipboard clipB = Toolkit.getDefaultToolkit().getSystemClipboard(); public void run() { /* Initialize ClipboardListener and gain ownership of clipboard */ } @Override public void lostOwnership(Clipboard clipboard, Transferable transferable) { /* Auto-fired when I lose Clipboard ownership. Can do processing and regaining ownership here */ } } […]

在Java中启用Intel超线程

我有一个在四核Intel i7上运行的multithreading程序。 当我执行Runtime.getRuntime.availableProcessors() ,我得到8,我知道在这个CPU上可以使用超线程。 但是,当我创建线程时,我的CPU级别为4个线程的100%(即非零),这意味着4个线程未被使用。 有没有办法在Java中启用超线程?

Java内存行为:与Thread.sleep不同

我正在尝试使用visualvm进行一些内存分析。 我编写了一个基本代码,它运行一个无限循环来向List添加对象。 package home.always.learning.java; import java.util.ArrayList; import java.util.List; public class Heaper { private static List listObj = new ArrayList(); private static final String nameConst = “Tarun Trehan”; public static void main(String[] args)throws Exception{ personListCreation(); } public static void personListCreation() throws Exception { int i = 0; while(true) { System.out.println(“Looping to create person list…”); i++; listObj.add(new […]

生成随机条形码 – 一个设计问题

我正在修复生成条形码的java代码中的错误(线程问题)。 根据设计,条形码只是一个数字,下一个“未使用”条形码是序列中的下一个。 有990亿可能的数字。 首先,由于安全问题,我不喜欢自动递增的数字。 我想生成随机数。 已使用的条形码存储在数据库表中。 如果条形码正在使用,创建一个随机数并检查表是非常容易的。 但逻辑必须循环,直到找到一个未使用的随机数。 到时候这可能是一项繁重的任务。 我认为具有1000个免费条形码的线程安全缓存可以完成这项工作,但构建或更新缓存可能非常繁重。 对查询设计的任何建议或者可以返回一系列免费随机数的查询? 我正在使用hibernate标准。 谢谢

Runnable运行哪个线程?

我想每100毫秒更新一次UI。 在StackOverflow中搜索后,我发现了一个使用Runnable和Handler的解决方案 final Handler handler = new Handler(); Runnable runnable = new Runnable() { @Override public void run() { //update UI here handler.postDelayed(this, 100); } }; runnable.run(); 有用! 但我有一些问题: Runnable运行在哪个线程上? MainThread还是其他线程? 这是关于postDelay的文档 Handler附加了MainThread, Runnable在MainThread上运行吗? 如果Runnable在MainThread上运行,为什么需要Handler ? 根据我的知识, Handler用于在两个线程之间发送消息