当涉及到 Java 领域的多线程和并发时,共识是将您想要多线程的代码隔离为“任务”,并将该任务提交给某种执行程序服务或线程池。
我想知道的是:
- 任务可以是任何对象的任何方法,还是必须是特殊的(如果是,是什么)?
- 您如何确定此任务是否受 CPU、IO 限制或其他限制?什么是“死的赠品”或其他决定因素?
在此先感谢您的澄清!
当涉及到 Java 领域的多线程和并发时,共识是将您想要多线程的代码隔离为“任务”,并将该任务提交给某种执行程序服务或线程池。
我想知道的是:
在此先感谢您的澄清!
submit(Callable)
submit(Runnable)
您的任务可能应该是两个接口之一(始终可以调用其他方法)。
如果您在其中执行任何输入/输出操作,您的任务可能是 IO 绑定的:IE、读取文件、写入文件、从套接字读取、写入套接字等。
Threads
通常执行他们在实现Runnable
.
任务可以是任何对象的任何方法,还是必须是特殊的(如果是,是什么)?
它可以是任何东西。最大的问题是您的任务可能会包含一些与其他线程共享的对象。您必须确保对这些对象的访问是线程安全的。这是一个复杂的话题;Goetz 等人的“Java Concurrency in Practice”是一本非常好的书。