Tag:

是java.util.UUID线程安全吗?

由于以下观察,我问这个问题 在高度multithreading环境中的线程转储中获取此堆栈跟踪 “http-80-200” daemon prio=10 tid=0x00002aaab4981000 nid=0x7520 waiting \ for monitor entry [0x000000004fec7000] java.lang.Thread.State: BLOCKED (on object monitor) at java.security.SecureRandom.nextBytes(SecureRandom.java:433) – waiting to lock (a java.security.SecureRandom) at java.util.UUID.randomUUID(UUID.java:162) 找到了这个链接 http://bugs.sun.com/view_bug.do?bug_id=6611830 如果UUID不是线程安全的,请建议任何其他库(如果存在)。

Java中的方法参数是否安全?

Class Shared{ public void sharedMethod(Object o){ //does something to Object } } //this is how threads call the shared method run(){ sharedInstance.sharedMethod(someObject); } 现在将o作为参数传递给方法。 多个线程并行调用相同的方法。 我们可以安全地说这段代码是线程安全的吗? 有两种情况: 如果someObject在线程之间共享 如果每个Thread都有自己的someObject副本

Java线程状态转换,WAITING到BLOCKED还是RUNNABLE?

SO共识与互联网上几乎所有Java线程状态图之间似乎存在差异; 具体来说,关于在调用notify()或notifyAll()之后来自 WAITING线程状态转换… 等待永远不会直接进入RUNNABLE 该线程正在等待直到通知……然后它变为 BLOCKED … 一旦通知此线程,它将无法运行 …这是 …阻塞状态。 因此,对SO的一致意见是:在调用notify()或notifyAll()之后,线程从WAITING转换为BLOCKED ; 下图说明了绿色的这种转变。 题 为什么Web上的大多数状态图说明了从WAITING到RUNNABLE ,而不是BLOCKED的过渡? 红色描绘显示不正确的过渡; 我错过了什么吗?

Java等待和notifyAll:IllegalMonitorStateException

我是Java新手(和RoR开发人员)。 我有一个简单的程序。 球是共享的球员。 球应该传递给随机球员。 好的,这里是代码: class Ball { private int currentPlayer; public void setCurrentPlayer( int currentPlayer, int fromWho ) { this.currentPlayer = currentPlayer; System.out.println( “Ball:setCurrentPlayer ” + fromWho + ” —> ” + currentPlayer ); } public int getCurrentPlayer() { return currentPlayer; } } class Player implements Runnable { private int myID; private Ball ball; […]

为什么我收到IllegalMonitorStateException?

当我尝试解锁一个对象时,我得到以下exception。 Exception in thread “Thread-1” java.lang.IllegalMonitorStateException at java.util.concurrent.locks.ReentrantLock$Sync.tryRelease(Unknown Source) at java.util.concurrent.locks.AbstractQueuedSynchronizer.release(Unknown Source) at java.util.concurrent.locks.ReentrantLock.unlock(Unknown Source) at Pipe.unlock(Pipe.java:21) at Station.doWork(Station.java:81) at Station.run(Station.java:66) at java.lang.Thread.run(Unknown Source) Pipe.unlock所做的就是以下内容: public void unlock(){ accessLock.unlock(); } 其中accessLock是ReentrantLock 你知道问题出在哪里吗? 编辑: 这是Station中的run方法 if(Pipes[inConnection].accessLock.tryLock()){ System.out.println(“Station “+ StationNumber+”: granted access to pipe “+inConnection+”.”); //This is just a way for me to keep track if both […]

特定线程数

我想知道特定Thread类有多少活动线程。 假设我有一个T类扩展线程。 在其他一些类(Ex:Demo)中,我想得到T类Thread的线程数。 我知道Thread.activeCount()方法,但它将获得一个线程组的计数。 它不能满足我的需求。 假设我有T1和T2类扩展线程,在Demo类中我想得到多少T2活动线程。 我该怎么做到这一点? 有任何想法吗?? PS:我没有类T1和T2的源代码。 谢谢您的帮助。

测试线程优先级。 在某些情况下,低优先级线程如何更快?

我正在尝试测试2个线程,一个是高线程,另一个是低优先级。 根据我的结果有时低优先级线程更快,这怎么可能? 我通过在每个线程内增加一个click变量来测试不同的优先级线程。 我也增加和减少了睡眠时间,但没有。 由于我在后台运行没有繁重的程序进行测试,我决定测试高清电影运行,但仍然没有真正的变化,线程始终是相同的速度。 我的电脑是Intel i5。 我正在运行Windows 7 64位,16GB RAM 这是代码: class clicker implements Runnable{ long click =0; Thread t; private volatile boolean running = true; clicker(int p){ t=new Thread(this); t.setPriority(p); } public void run(){ while(running) click++; } public void stop(){ running = false; } public void start(){ t.start(); } } class HiLoPri { […]

这需要显式同步吗?

我有两个线程,我想确保我在LinkedBlockingQueue上正确进行同步..这是正确的吗? 或者是否必须在(messageToCommsQueue)上进行显式同步? 宣言: private LinkedBlockingQueue messagesToCommsQueue; 方法一: private void startOperationModeStatusMessageExecutor() { ScheduledExecutorService operationModeStatusExecutor = Executors.newSingleThreadScheduledExecutor(); operationModeStatusExecutor.scheduleAtFixedRate((new Runnable() { @Override public void run() { MT02OperationModeStatusMessage commsOperateMsg; commsOperateMsg = MessageFactory.getMT1102OperationModeStatusMessage(status.ordinal()); synchronized (messagesToCommsQueue) { messagesToCommsQueue.add(commsOperateMsg); } } }), 0, 10, TimeUnit.SECONDS); } 方法二: Executor commsSenderExecutor = Executors.newSingleThreadExecutor(); commsSenderExecutor.execute(new Runnable() { @Override public void run() { while (getStatus().equals(OperationModeStatus.INITIATE) || […]

2D易失性数组:自我赋值帮助还是我需要AtomicIntegerArray?

我正在写一个音频DSP应用程序,我选择使用生产者 – 消费者模型。 我一直在阅读关于volatile和其他线程问题的很多内容,但是我对我的一些细节有一些疑问 – 特别是,我需要在线程之间共享的一个问题是数组数组。 我有一个代表生产者的class级。 为了允许处理时间的变化,生产者存储n缓冲区,每当有更多的音频数据可用时它将填充旋转并将缓冲区传递给消费者线程。 我将从我的问题开始,然后我将尝试详细解释我的系统 – 对于长篇文章感到遗憾,谢谢你的支持! 我也非常感谢关于我的实现和线程安全的一般性评论。 我的缓冲区由volatile byte[][]数组表示。 我很清楚volatile只会使引用变为volatile,但是阅读了SO和各种博客文章,似乎我有两个选择: 我可以使用AtomicIntegerArray 。 但: 我会为这样的应用程序降低性能吗? primefaces性甚至是我需要的吗? 我打算一次写入整个数组, 然后我需要它对另一个线程可见,我不需要每个单独的写入是primefaces的或立即可见的。 如果我理解正确(例如这篇博文 ),自我赋值,在我的情况下是: buffers[currentBuffer] = buffers[currentBuffer]将确保发布,您将在下面的代码中看到。 这是正确的,它会导致所有最近的写入变得可见吗? 这是否适用于像这样的2D数组? 我将简要介绍一下生产者类的概述; 这些是实例变量: // The consumer – just an interface with a process(byte[]) method AudioInputConsumer consumer; // The audio data source AudioSource source; // The number of […]

让线程睡眠30分钟

我想让我的线程等待30分钟。 这样做有什么问题吗?