Tag: 竞争条件

multithreading合并排序算法

我有一个类在genericsList上进行一些递归合并排序,只要该元素实现Comparable。 我正在尝试使代码multithreading以提高性能,为此,我有一个静态变量maxThreads ,它保持我创建的线程数不爆炸,我有一个静态变量currentThreads跟踪我目前运行的线程数。 我的currentThreads变量似乎存在竞争条件,但我无法找到解决方案来修复它。 import java.util.ArrayList; import java.util.List; public class ThreadedMergeSorter<E extends Comparable> implements, Runnable { private List list; private List left, right; private Thread t1, t2; private static final int maxThreads = 4; private static AtomicInteger currentThreads = new AtomicInteger(0); private ThreadedMergeSorter(List list) { this.list = list; } public ThreadedMergeSorter(){} /** * Sorts a […]

java:竞争条件 – 有没有办法确保几行代码一起执行?

我有一个注册页面,它接收令牌广告解析它们并在参数适用时登录用户。 在我检查令牌的时间到我从数据库中删除令牌的时间之间,另一个用户可以使用相同的令牌登录。 有没有办法确保执行特定范围的代码行而不会产生干扰,所以我不会遇到竞争条件问题? 谢谢 更新 我有两台服务器。 apache tomcat 6 red5 v0.9(免费的基于java的Flash媒体流和通信服务器) 我正在为Facebook写一个游戏应用程序。 游戏本身是用adobe flash builder 2编写的。 游戏本身将使用red5服务器提供。 问题是red5没有收到请求和响应头,因此无法检索用于从Facebook获取信息的会话信息。 解决用户连接到tomcat服务器的问题,该页面检查会话中的facebook相关信息,并使用tinyFBClient连接到facebook,并将信息存储在mysql db(用户详细信息)中,以确保这一点同一用户是要连接到red5的用户。 一旦创建了令牌。 tomcat页面显示一个对象HTML元素,以显示相关的SWF文件(游戏文件)。 tomcat页面将令牌传递给该SWF文件。 加载SWF文件后,它会获取该令牌并使用它连接到red5并找到用户信息。 我希望这些描述可以帮助您了解我的需求。 感谢您的支持!

与System.out关联的Java线程的奇怪行为

我有一个简单的TestThreadClientMode类来测试竞争条件。 我尝试了两次尝试: 当我使用System.out.println(count);运行以下代码时System.out.println(count); 在第二个post中评论,输出是: OS: Windows 8.1 flag done set true … 而第二个线程永远活着。 因为第二个线程永远不会看到由主线程设置为true的done标志的更改。 当我取消注释System.out.println(count); 输出是: OS: Windows 8.1 0 … 190785 190786 flag done set true Done! Thread-0 true 程序在1秒后停止。 System.out.println(count);怎么做的System.out.println(count); 让第二个线程看到done的更改? 码 public class TestThreadClientMode { private static boolean done; public static void main(String[] args) throws InterruptedException { new Thread(new Runnable() { public […]

在单个后台线程定期修改它的同时读取Map

我有一个类,我在updateLiveSockets()方法中每隔30秒从一个后台线程填充一个地图liveSocketsByDatacenter然后我有一个方法getNextSocket() ,它将由多个读者线程调用以获得一个可用的实时套接字获取此信息的相同地图。 public class SocketManager { private static final Random random = new Random(); private final ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(); private final AtomicReference<Map<Datacenters, List>> liveSocketsByDatacenter = new AtomicReference(Collections.unmodifiableMap(new HashMap())); private final ZContext ctx = new ZContext(); // Lazy Loaded Singleton Pattern private static class Holder { private static final SocketManager instance = new SocketManager(); } […]