Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 访问线程池正在运行的对象_Java_Multithreading_Executors - Fatal编程技术网

Java 访问线程池正在运行的对象

Java 访问线程池正在运行的对象,java,multithreading,executors,Java,Multithreading,Executors,对于我的程序,我使用ConcurrentHashMap保存对多个运行对象的引用。 在我的服务器中,我有: public class Server { private ConcurrentHashMap<String, ChatRoom> _chatRooms; private ExecutorService _chatRoomExecutor; ... // create a new channel executor to handle 50 chatrooms _chatRoo

对于我的程序,我使用ConcurrentHashMap保存对多个运行对象的引用。 在我的服务器中,我有:

public class Server {

private ConcurrentHashMap<String, ChatRoom> _chatRooms;
private ExecutorService _chatRoomExecutor;
...

// create a new channel executor to handle 50 chatrooms
_chatRoomExecutor= Executors.newFixedThreadPool(50);
// create an admin chatroom for testing at this point
_chatRooms.put("/admin", new Channel("/admin"));
// execute that chatroom
_chatRoomExecutor.execute(_chatRooms.get("/admin"));
公共类服务器{
私人ConcurrentHashMap聊天室;
私人Executor服务(聊天室Executor);
...
//创建一个新的频道执行器来处理50个聊天室
_chatRoomExecutor=Executors.newFixedThreadPool(50);
//创建一个管理员聊天室,以便在此时进行测试
_聊天室。放置(“/admin”,新频道(“/admin”);
//执行那个聊天室
_chatRoomExecutor.execute(_chatRooms.get(“/admin”));
这会像我仍然可以从ConcurrentHashMap访问聊天室一样工作吗?还是我必须对线程池做些什么

这会像我仍然可以从ConcurrentHashMap访问聊天室一样工作吗?还是我必须对线程池做些什么


是的,您的代码应该可以正常工作。但是,您需要确保在
聊天室
对象中的字段上正确同步,因为线程池线程和外部线程都可以从它们的
run()
方法访问它们通过从
ConcurrentHashMap
获取对象,这将是您的挑战。

这可能会起作用,我会使字段
成为最终的
,以确保它们不会更改。很难说出“这会起作用”是什么意思-什么有效?我不知道ConcurrentHashMap将保存的线程引用在我执行以下行时是否会更改:\u chatRoomExecutor.execute(\u chatRooms.get(“/admin”));这可能不是最好的方法,但聊天室对象线程所做的只是检查聊天室中是否还有人。如果没有,它将终止该线程。所有其他聊天室操作(例如发送聊天、让客户端加入/离开)由聊天室中包含的executor服务负责。所有其他线程只需将其任务提交给该executor服务。我认为这听起来像一个很好的体系结构。