在java中创建多个线程

在java中创建多个线程,java,multithreading,threadpool,simulation,java-threads,Java,Multithreading,Threadpool,Simulation,Java Threads,我想模拟人类种群&为此,我想给每个个体分配一个线程。这个数字应该达到亿 每个线程的行为都是独立的,其末端将宣布人类死亡。 我已经通过简单的线程创建实现了这一点&也通过线程池实现了这一点。但在某个时间点之后,两种方法中的线程分配就停止了。在150000线程之后。 我知道java线程被OS线程以1:1的比例绑定&这会带来一个问题。 还有什么方法可以最好地模拟这个问题呢?您可以看看参与者模型,它比线程更适合您的情况 特别是,akka是开源的,并且以实现这种模式而闻名:这太不合理了。一个不执行任何操作的

我想模拟人类种群&为此,我想给每个个体分配一个线程。这个数字应该达到亿 每个线程的行为都是独立的,其末端将宣布人类死亡。 我已经通过简单的线程创建实现了这一点&也通过线程池实现了这一点。但在某个时间点之后,两种方法中的线程分配就停止了。在150000线程之后。 我知道java线程被OS线程以1:1的比例绑定&这会带来一个问题。
还有什么方法可以最好地模拟这个问题呢?

您可以看看参与者模型,它比线程更适合您的情况


特别是,akka是开源的,并且以实现这种模式而闻名:

这太不合理了。一个不执行任何操作的线程大约会消耗1MB的RAM。仅仅拥有1000个线程就需要1GB的内存。10亿意味着100万GB或内存。即使假设您要建模的每个人只需要16个字节,这比整数所需的少,您也需要16GB的RAM。除非你能买一些超级计算机,并聘请在这方面非常有能力的专家,否则你不能做你想做的事。人类在你的模拟中做什么?也许你可以让多个工作线程组织更多的人。如果一个人没有活动,分配一个线程来代表一个人不是一个好主意,即使他们有活动,在创建了一定数量的线程后,一个人可能需要几分钟来喘口气。所以你应该想出一个不同的模型。@Meini人类只是找到一个伴侣,生产另一个人,即另一条线,然后死亡。用线显然是个坏主意。我想我可以和他们一起玩@JBNizet