Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.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 - Fatal编程技术网

Java 使用线程同时创建一个类的十个实例

Java 使用线程同时创建一个类的十个实例,java,multithreading,Java,Multithreading,我试图理解Java中的线程。作为练习,我创建了一个冰淇淋类,如下所示 public class ThreadIceCream { private String flavor = ""; private String[] specialFlavors = { "Vanilla", "Chocolate", "Butter Pecan", "Strawberry", "Chocolate Chip", "Cherry", "Coffee" }; // Constructor for Thr

我试图理解Java中的线程。作为练习,我创建了一个冰淇淋类,如下所示

public class ThreadIceCream {

private String flavor = "";
private String[] specialFlavors = { "Vanilla", "Chocolate", "Butter Pecan", "Strawberry", "Chocolate Chip", "Cherry", "Coffee" };
    // Constructor for ThreadIceCream class
public ThreadIceCream() {       
    int randInt = (int) (Math.random() * specialFlavors.length);
    flavor = specialFlavors[randInt];
    System.out.println("Enjoy your " + flavor + " IceCream!");
} }
ThreadIceCream类是一个简单的类,它在每次初始化该类时创建一个带有随机味道的IceCream对象。这是我正在使用的测试存根

public class TestStub {

public static void main(String[] args) {

    ThreadIceCream Th1 = new ThreadIceCream();
    ThreadIceCream Th2 = new ThreadIceCream();

} }

现在我想创建10个冰激凌(即同时创建10个ThreadIceCream类实例),我想使用Java中的线程来实现这一点。我尝试了一些方法,但都没有成功。

其实并不难:

Thread[] threads = new Thread[10];
for(int i = 0; i < 10; i++) {
    threads[i] = new Thread(new Runnable() {
                    public void run() {
                        ThreadIceCream tic = new ThreadIceCream();
                    }
                 });
    threads[i].start();
}

for(int i = 0; i < 10; i++) {
    threads[i].join();
}

这里我们创建了一个包含10个线程的池,并提交了10个任务。线程在任务执行之间循环使用,因此无论提交多少任务,都只创建了10个线程。由于任务非常小,甚至可以在同一个线程上执行多个任务,但这实际上是一件好事。

听说过循环吗?顺便说一句,为什么这里需要线程?我知道循环会一个接一个地创建10个实例。我想用线程来学习线程是如何工作的,从一个简单的例子开始,以便更好地理解。如果你能帮我解决这个问题,而不是给我一些琐碎的建议,那就太好了。如果你学会了使用搜索引擎来回答已经被问了数千次的问题,那就太好了。关于如何用Java创建一个简单的线程应用程序的例子不胜枚举,任何人在这里复制一个都是浪费时间的。谢谢Tudor,我也在博客上读了一些文章。我现在知道了。我试试看,看能不能做对。谢谢你的回复!
ExecutorService exec = Executors.newFixedThreadPool(10);
for(int i = 0; i < 10; i++) {
    exec.submit(new Runnable() {
                    public void run() {
                        ThreadIceCream tic = new ThreadIceCream();
                    }
                });        
}

exec.shutdown();
exec.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS);