精华内容
下载资源
问答
  • Java使用循环创建多个线程

    千次阅读 2019-05-19 23:31:13
    使用start()方法启动线程,则立即开始创建下一个线程。 测试代码及结果如下: 情景:循环创建一类线程,这类线程的run()方法不能立即结束,如包含循环等。 问题:创建线程后,启动线程时,使用run(...

    目录

    情景:循环创建一类线程,这类线程的run()方法不能立即结束,如包含循环等。

    问题:创建线程后,启动线程时,使用run()方法则需要等待线程的run()方法先结束,否则阻塞;使用start()方法启动线程,则立即开始创建下一个线程。

    测试代码及结果如下:


     

     情景:循环创建一类线程,这类线程的run()方法不能立即结束,如包含循环等。

    问题:创建线程后,启动线程时,使用run()方法则需要等待线程的run()方法先结束,否则阻塞;使用start()方法启动线程,则立即开始创建下一个线程。

    测试代码及结果如下:

    package thread_test;
    
    class Thread_test extends Thread{//线程类
    	@Override
    	public void run() {
    		while(true);//线程的功能函数中含有死循环
    	}
    }
    public class For_Thread {
    	public static void main(String[] args) {
    		for(int i=0;i<4;i++) {//使用循环创建线程
    			Thread_test t = new Thread_test();
    			t.start();//使用start()方法,不会阻塞
    			System.out.println(i);
    		}
    	}
    }
    

     

    package thread_test;
    
    class Thread_test extends Thread{//线程类
    	@Override
    	public void run() {
    		while(true);//线程功能函数中存在不能立即结束的循环
    	}
    }
    public class For_Thread {
    	public static void main(String[] args) {
    		for(int i=0;i<4;i++) {//循环创建线程
    			Thread_test t = new Thread_test();
    			t.run();//使用run()方法会阻塞
    			System.out.println(i);
    		}
    	}
    }

    当线程的run()函数可以立即结束时,启动线程时,使用run()方法可以立即结束

    展开全文
  • 我正在尝试创建多个线程,其数量取决于命令行的输入.我知道扩展Thread不是最好的OO练习,除非你正在制作一个专门版本的Thread,但假设这个代码创建了所需的结果?class MyThread extends Thread {public MyThread ...

    我正在尝试创建多个线程,其数量取决于命令行的输入.我知道扩展Thread不是最好的OO练习,除非你正在制作一个专门版本的Thread,但假设这个代码创建了所需的结果?

    class MyThread extends Thread {

    public MyThread (String s) {

    super(s);

    }

    public void run() {

    System.out.println("Run: "+ getName());

    }

    }

    class TestThread {

    public static void main (String arg[]) {

    Scanner input = new Scanner(System.in);

    System.out.println("Please input the number of Threads you want to create: ");

    int n = input.nextInt();

    System.out.println("You selected " + n + " Threads");

    for (int x=0; x

    {

    MyThread temp= new MyThread("Thread #" + x);

    temp.start();

    System.out.println("Started Thread:" + x);

    }

    }

    }

    展开全文
  • 示例代码更好的选择:import java.util.concurrent.*;public class ExecutorTest{public static void main(String args[]){int numberOfTasks = Integer.parseInt(args[0]);ExecutorService executor= Executors....

    示例代码更好的选择:

    import java.util.concurrent.*;

    public class ExecutorTest{

    public static void main(String args[]){

    int numberOfTasks = Integer.parseInt(args[0]);

    ExecutorService executor= Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());

    try{

    for (int i=0; i < numberOfTasks; i++){

    executor.execute(new MyRunnable(i));

    }

    }catch(Exception err){

    err.printStackTrace();

    }

    executor.shutdown(); // once you are done with ExecutorService

    }

    }

    class MyRunnable implements Runnable{

    int id;

    public MyRunnable(int i){

    this.id = i;

    }

    public void run(){

    try{

    System.out.println("Runnable started id:"+id);

    System.out.println("Run: "+ Thread.currentThread().getName());

    System.out.println("Runnable ended id:"+id);

    }catch(Exception err){

    err.printStackTrace();

    }

    }

    }

    用法:

    java ExecutorTest 2

    Runnable started id:0

    Run: pool-1-thread-1

    Runnable ended id:0

    Runnable started id:1

    Run: pool-1-thread-2

    Runnable ended id:1

    相关文章:(使用ExecutorService的优点作为普通的替代品Thread)

    展开全文
  • 我有一方法(不在线程类中),它创建给定大小(最大10-15)的线程池并将它们用于网络调用,我从循环次调用该方法.当我在慢速机器(3 GB RAM,Pentium-IV)上运行此应用程序时,一切正常,但是当我在iMac(32 GB RAM,i7...

    我在我的

    Java应用程序中使用线程来并行获取数据(使用网络调用).我有一个方法(不在线程类中),它创建一个给定大小(最大10-15)的线程池并将它们用于网络调用,我从循环中多次调用该方法.

    当我在慢速机器(3 GB RAM,Pentium-IV)上运行此应用程序时,一切正常,但是当我在iMac(32 GB RAM,i7处理器)上运行它时,它创建了太多线程,大约2,500个有时会抛出一个内存不足的错误.

    我怀疑JVM在完成后不会将完成的线程重新放回池中,因此它正在创建新线程.

    甚至在iMac上,如果我保留Thread.sleep(1000);在我上面提到的for循环中一切正常.虽然创建了大约900个线程.

    以下是此应用程序的代码示例:

    public ArrayList getValuesForKeyFromMaps(String key,ArrayList locations) throws InterruptedException,ExecutionException {

    int threadNum = locations.size(); // 10-15 at max

    ExecutorService executor = Executors.newFixedThreadPool(threadNum);

    List>> taskList = new ArrayList>>();

    for(final Meta location : locations){

    FutureTask> futureTask_1 = new FutureTask>(new Callable>() {

    public ArrayList call() throws Exception {

    // Service call

    return getValues(key,location);

    }

    });

    taskList.add(futureTask_1);

    executor.execute(futureTask_1);

    }

    ArrayList values = new ArrayList();

    // Wait until all results are available and combine them at the same time

    for (int j = 0; j < threadNum; j++) {

    FutureTask> futureTask = taskList.get(j);

    values.addAll(futureTask.get());

    }

    executor.shutdown();

    return values;

    }

    如果我在iMac上使用下面的for循环调用上面的方法,它会抛出一个内存错误,因为它创建了大约2,500个线程.但它在较慢的机器上工作正常.

    for(String key : keySet){

    getValuesForKeyFromMaps(key,MetaMap.get(key));

    }

    并且,使用以下代码,在iMac上,它可以正常工作,大约有900个线程.

    for(String key : keySet) {

    getValuesForKeyFromMaps(key,MetaMap.get(key));

    Thread.sleep(200); // Sleeping for 200 ms

    }

    如果我将上面的for循环中的睡眠时间增加到1000毫秒,它只创建30-50个线程并且应用程序正常工作.

    如何控制应用程序中允许的最大线程数?我打算在给定时间最多创建/使用10-15个线程,但Java创建的太多了.

    展开全文
  • 我正在尝试编写一个java程序,它从数据库中读取信息,并为表的每一行创建线程.所以我不知道我需要多少线程.到目前为止我有这:con = DriverManager.getConnection(url, user, passwd);pst = con.prepare...
  • 每次创建的对象是不同的,但是引用是同一,引用的生命周期是单次循环,下次循环会覆盖调上次的引用。 比如这段代码: int minId = 0; while (true){ List&lt;InvitationRel&gt; invitationRelList.....
  • 我们可以使用ThreadPoolExecutor来创建线程池,它的构造方法如下:1.corePoolSize,线程池的基本大小,当你提交任务到线程池时,线程池会创建个线程来执行该任务。已经创建的线程数量达到corePoolSize之后就不再...
  • 多进程操作系统能同时运行多个线程,由于CPU具备分时机制,所以每个进程都能循环获得自己的CPU时间片。 线程:是比进程更小的执行单位,线程是在进程的基础之上进行的进一步划分。所谓多线程是指一个在执行过程中...
  • 上一篇我们说到了Java多线程的概念以及优缺点|乐字节,本文将接着说Java多线程创建,以及多线程的状态。一、创建线程 1、创建 Thread 的子类 创建: 继承 Thread +重写 run 启动: 创建子类对象 对象.start() 创建 ...
  • 创建n多个线程,如何保证这些线程同时启动?看清,是“同时”。用一个for循环创建线程对象,同时调用wait()方法,让所有线程等待;直到最后一个线程也准备就绪后,调用notifyAll(), 同时启动所有线程。比如:给你n个...
  • MySqlDataReader是有状态的 –...您还需要为每个线程创建一个临时字典,然后将它们合并,或者使用锁来防止对字典进行并发修改.以上假设MySQL将允许单个连接执行并发查询;否则你可能也需要多个连接.首先,我会看到如果您...
  • ????使用 ThreadGroup,首先创建个线程组,把创建的子线程都放到这个线程组里,然后循环判断这个线程组的活跃线程数量 是否等于0,不等于0继续,否则代表子线程全部执行完了,进行下一步。
  • Java继承Thread类创建多线程

    千次阅读 2018-04-15 23:10:26
    Java继承Thread类创建多线程线程示例 示例,Example01.java public class Example01{ public static void main(String[] args){ // 创建MyThread实例对象 // 调用MyThread类的run()方法在运行 // 该...
  • 线程的执行特性(1)随机性(一部执行):谁“抢”到CPU,谁执行(2)宏观上同时执行,微观上同一时刻只能执行一个线程(多核除外)二.线程的创建和启动1.两种创建 新线程的方式<1>第一种方式:将类声明为Thread的...
  • 1、创建一简单的线程,不需要去创建Runnable Thread thread = new Thread(new Runnable() { @Override public void run() { //to do 你要执行的方法 } }); thread.start(); 2、如果要循环创建的话,可以...
  • 在应用中有一个循环来调用ICE接口,使用的是ICE的库,调用的时候会创建大量的线程,到了一定的时候就会报错,tomcat退出。在tomcat bin目录下生成hs_err_pidxxx.log文件,开头错误提示:# # There is insufficient ...
  • 处理思路:(1)比如查出100万数据(2):创建10个线程循环处理这些数据,每一次处理调用一个线程,如果某一个线程被占用了,那么就调用另外一个线程,以此类推,这样就不需要等待上一个线程的完毕,从而加快处理...
  • 本文记录学习多线程之间的任务调度,在面试中我们也经常会碰到线程循环打印ABCD这样的面试题,接下来用代码进行实践,本文使用lock接口进行实现 线程操作资源类,首先在资源类中定义一可重入锁,以及4绑定条件 ...
  • 今天用到用ScheduledExecutorService 做定时任务,发现里面可以做多线程的操作。使用起来也很方便。 直接new 实例就可以了。 ScheduledExecutorService executor = Executors .newScheduledThreadPool(10); ...
  • 一个进程包含多个线程 进程的三个基本状态极其转换 举个简单的例子,假设操作系统的CPU调度用的是经典的时间片轮转算法 OS分配CPU给某个程序–>程序运行–>OS检测到时间用完后切走CPU–>OS分配CPU给另外...
  • 我们之前写的代码(由main方法作为入口点,方法进行调用,一条路径,原路返回)都是单线程那么多线程是如何开辟和...Thread具有和CPU打交道的能力继承Thread类就可以理解为创建了一子线程run是子线程的入口点packa...
  • 每一个应用程序有至少一个线程(或者如果计算系统线程的话,如内存管理和信号处理,则是多个)。但是从应用程序程序员的角度,启动的只有一个线程,称为主线程(main thread)。这个线程有能力创建另外的线程。进程、...
  • 为了进行调试,我需要在一简单的窗口中在屏幕上绘制图像.Swing在单独的消息循环线程中处理所有事件.这意味着如果我执行以下操作:while(true) {//Get screenshotBufferedImage screenshot = MSWindow.screenshot();...
  • 一、需求分析版本V1:线程绘制小球版本V2:开启一个线程,绘制队列listBall内多个小球版本V3:使用启动和暂停按钮,控制线程小球的运动二、版本V1:线程绘制小球点击绘制区域,获取x和y的坐标;创建和开始一...
  • 1、创建类,实现Runnable,在这类里面重写run()方法,在run()方法里面写一20的for循环 2、创建类,实例化上面的类,用这类的对象创建线程 |--代码内容 1 package cn.thread; 2 3 /** ...
  • (一)继承Thread类创建多线程----单线程 下面的代码是一循环,但是不会执行main里面的循环语句,而是run()里面的语句,这是因为该程序是一线程程序,当调用MyThread类的run()方法时,遇到死循环循环...
  • 我目前正致力于理解线程的Java概念....使用我的示例中的知识,我能够创建循环内运行的10个线程(代表运动员),执行100次(代表100米).我的挑战是,当线程调度员使运动员在其他9名运动员之前达到100米...
  • Java多线程程序控制线程个

    千次阅读 2010-07-13 11:38:00
    ExecutorService pool = Executors.newFixedThreadPool(100); for(无限循环){ //创建A线程并启动线程 pool.execute(new A()); }
  • 一,引出多线程: 概念:就是同一时刻多个任务可以同时执行,这就是多线程 比如双十一秒杀产品的时候,是多个人同时抢,而不是先由一个人抢,后面的所有人都等着,...2,把两个程序放入到两个线程下,然后写到匿名内...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 592
精华内容 236
关键字:

java循环创建多个线程

java 订阅