Java x个线程数的多线程示例

Java x个线程数的多线程示例,java,multithreading,Java,Multithreading,我是多线程世界的新手,如果我们从命令提示符传递x个线程,我不确定如何编写一个可以调用x个线程的java应用程序。就像我们路过一样 java –jar pds_client_batch.jar <number of threads> java–jar pds\u client\u batch.jar 在这里,如果线程数被传递为20,那么它应该运行20个线程。任何简单的示例都将不胜感激。公共类示例 public class Example { private class Dumb

我是多线程世界的新手,如果我们从命令提示符传递x个线程,我不确定如何编写一个可以调用x个线程的java应用程序。就像我们路过一样

java –jar pds_client_batch.jar <number of threads>
java–jar pds\u client\u batch.jar
在这里,如果线程数被传递为20,那么它应该运行20个线程。任何简单的示例都将不胜感激。

公共类示例
public class Example
{
  private class DumbThread implements Runnable
  {
    public void run()
    { 
      System.out.println("Thread ran");
    }
  }

  public static void main(String args[])
  {
    int input = Integer.parseInt(args[0]);
    for (int x = 0; x < input; x++)
      new Thread(new DumbThread()).start();
  }
}
{ 私有类线程实现可运行 { 公开募捐 { System.out.println(“线程运行”); } } 公共静态void main(字符串参数[]) { int input=Integer.parseInt(args[0]); 对于(int x=0;x
现在,如果你想让它做一些有用的事情

编辑:使更完整。它仍然毫无用处。而且它甚至不做基本的错误检查。

公共类示例
{
私有类线程实现可运行
{
公开募捐
{ 
System.out.println(“线程运行”);
}
}
公共静态void main(字符串参数[])
{
int input=Integer.parseInt(args[0]);
对于(int x=0;x
现在,如果你想让它做一些有用的事情


编辑:使更完整。它仍然毫无用处。而且它甚至不做基本的错误检查。

您也可以使用类似的Executor服务。并传入您希望它使用的线程数。

您也可以使用类似Executor的服务。并传入您希望它使用的线程数。

现在,我们鼓励您使用线程池来更好地管理线程。您可以创建固定线程池:

class ThreadTask implements Runnable {
    private int id;

    public ThreadTask(int id) {
        this.id = id;
    }

    public void run() {
        System.out.println("I am task " + id);
    }
}

public class TestPool {

    public static void main(String[] args) {
        int size = Integer.parseInt(args[0]);

        // create thread pool with given size
        ExecutorService service = Executors.newFixedThreadPool(size); 

        // queue some tasks
        for(int i = 0; i < 3 * size; i++) {
            service.submit(new ThreadTask(i));
        }


        // wait for termination        
        service.shutdown();
        service.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS); 
    }
}
class ThreadTask实现可运行{
私有int-id;
公共线程任务(int-id){
this.id=id;
}
公开募捐{
System.out.println(“我是任务”+id);
}
}
公共类测试池{
公共静态void main(字符串[]args){
int size=Integer.parseInt(args[0]);
//创建具有给定大小的线程池
ExecutorService=Executors.newFixedThreadPool(大小);
//将一些任务排队
对于(int i=0;i<3*size;i++){
提交(新线程任务(i));
}
//等待终止
service.shutdown();
服务。等待终止(Long.MAX_值,时间单位:天);
}
}

现在,我们鼓励您使用线程池来更好地管理线程。您可以创建固定线程池:

class ThreadTask implements Runnable {
    private int id;

    public ThreadTask(int id) {
        this.id = id;
    }

    public void run() {
        System.out.println("I am task " + id);
    }
}

public class TestPool {

    public static void main(String[] args) {
        int size = Integer.parseInt(args[0]);

        // create thread pool with given size
        ExecutorService service = Executors.newFixedThreadPool(size); 

        // queue some tasks
        for(int i = 0; i < 3 * size; i++) {
            service.submit(new ThreadTask(i));
        }


        // wait for termination        
        service.shutdown();
        service.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS); 
    }
}
class ThreadTask实现可运行{
私有int-id;
公共线程任务(int-id){
this.id=id;
}
公开募捐{
System.out.println(“我是任务”+id);
}
}
公共类测试池{
公共静态void main(字符串[]args){
int size=Integer.parseInt(args[0]);
//创建具有给定大小的线程池
ExecutorService=Executors.newFixedThreadPool(大小);
//将一些任务排队
对于(int i=0;i<3*size;i++){
提交(新线程任务(i));
}
//等待终止
service.shutdown();
服务。等待终止(Long.MAX_值,时间单位:天);
}
}


,你能不能给我一个简单的工作示例,这样我就能理解更多,因为这些东西对我来说有点新。你能给我一个简单的工作示例,这样我就能理解更多,因为这些东西对我来说有点新。谢谢。你能给我一个简单的工作示例吗,这样我就能了解更多,因为这些东西对我来说有点新。你也应该在离开main之前加入线程,否则你将看不到任何输出。如果你是从命令提示符或IDE运行,你会看到,但如果你在输出窗口弹出的地方运行,你就不会看到。当然,这是一个非常幼稚的实现,任何有用的东西都可能希望加入,因为它希望实际使用已完成的工作。谢谢。你能给我一个简单的工作示例吗,这样我就能了解更多,因为这些东西对我来说有点新。你也应该在离开main之前加入线程,否则你将看不到任何输出。如果你是从命令提示符或IDE运行,你会看到,但如果你在输出窗口弹出的地方运行,你就不会看到。当然,这是一个非常幼稚的实现,任何有用的东西都可能希望加入,因为它希望实际使用已完成的工作。感谢您的详细回答,您能解释一下,这里发生了什么,所以假设大小为10,则意味着线程数为10,那么for循环中会做什么?意味着3*10=30,所以它将运行30次?还有我能在run方法中执行的任何有意义的任务吗?@Nevzz03:是的,您正在创建30个任务,这些任务由10个线程执行。您可以将任务代码放在
run
方法中。因此,如果我将任务代码放在run方法中,那么这意味着我将同时使用10个线程运行该任务代码?因此它将同时运行该任务。@Nevzz03:否,这将意味着该任务由10个线程之一运行。任务本身不能在多个线程之间拆分。这就是为什么我要创建30个任务,因为每个任务都将由不同的线程执行。@Tudor,那么假设我在run方法中添加了一些东西,那么每个任务都由每个线程独立运行,对吗?线程之间不会有相互引用,对吗?比如,如果第一个线程改变了值,然后第二个线程进入了循环。谢谢你的详细回答,你能解释一下,这里发生了什么,所以假设大小是10,那么这意味着线程的数量是10,那么for循环中做了什么?意味着3*10=30,所以它将运行30次?还有我能在run方法中执行的任何有意义的任务吗?@Nevzz03:是的,您正在创建30个任务,这些任务由10t执行