美文网首页
开启线程的多个方式

开启线程的多个方式

作者: b470b9fc7145 | 来源:发表于2018-08-30 10:29 被阅读22次

1. 开启多个线程

  1. new 之后通过start
  2. 或者在重写方法之后(例如:afterPropertiesSet),进行start
          int numThreads = 5;
          if (numThreads < 1 || numThreads > 5) {
              log.error("NUM_THREADS is out of range");
              System.exit(-1);
          }
          ToDoInfConsumer[] toDoInfConsumers = new ToDoInfConsumer[numThreads];
          for (int i = 0; i < toDoInfConsumers.length; i++) {
            //这有多例,所以注解的时候需要将要生成的consumer设置成多例@Scope("prototype")
              toDoInfConsumers[i] = applicationContext.getBean(ToDoInfConsumer.class);
          }
          for (ToDoInfConsumer toDoInfConsumer : toDoInfConsumers) {
              toDoInfConsumer.start();
          }
          

设置完属性之后,开启线程,要继承initialize bean

//注意继承initialize bean 
public class BalanceStatusConsumer extends Thread implements InitializingBean{}

    //在注入的时候,就会生自动运行run命令
    public BalanceStatusConsumer() {
        try {
            Properties prop = new Properties();
            String addrs = BalStsUtil.KAFKA_SERVERS;
            String groupId = BalStsUtil.KAFKA_GROUPID;
            prop.setProperty("bootstrap.servers", addrs);
            prop.setProperty("group.id", groupId);
            prop.setProperty("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
            prop.setProperty("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
            prop.setProperty("enable.auto.commit", "false");
            prop.setProperty("auto.offset.reset", "latest");
            prop.put("session.timeout.ms", "50000");
            prop.put("request.timeout.ms", "60000");
            prop.put("max.poll.records", "50");
            consumer = new KafkaConsumer<String, String>(prop);
        } catch (Exception e) {
            log.error("Initial Consumer fail: " + e);
        }
    }

    //开启线程
    @Override
    public void afterPropertiesSet() throws Exception {
        start();
    }


2. 设置环境变量

numThreads = Integer.parseInt(System.getenv("NUM_THREADS"));

run configration --> environment

注意

默认spring中的对象都是单例的,如果要多例需要用户自己设置

相关文章

  • 开启线程的多个方式

    1. 开启多个线程 new 之后通过start 或者在重写方法之后(例如:afterPropertiesSet),...

  • HTTP的多线程下载

    多线程下载是加快下载速度的一种方式,通过开启多个线程去执行一个任务,可以使任务的执行速度变快。多线程的任务下载时常...

  • NSThread

    开启子线程方式 创建线程 分离出子线程 开启后台线程 线程属性 线程名字 线程优先级0.0~1.0 默认0.5优先...

  • 定时器nstimer 详解

    一、主线程开启NSTimer 开启方式:scheduledTimerWithTimeInterval(直接开启)与...

  • NSTimer

    一、主线程开启NSTimer 开启方式:scheduledTimerWithTimeInterval(直接开启)与...

  • synchronized 、volatile 、线程通信基础、T

    synchronized单个对象多个线程问题 分析: 当多个线程访问线程类的run方法时,以排队的方式进行处理(通...

  • NSThread(二)

    线程的创建和开启 一个NSThread对象就是一个线程 多线程的安全隐患 资源共享:一个资源被多个线程共享,当多个...

  • 面向对象(二十二)-多线程使用

    1. Thread Thread默认开启前台线程。 其他的开启方式默认开启后台线程。 首先导入命名空间:Syste...

  • 30、C#中几种多线程的使用方式

    1. Thread Thread默认开启前台线程。 其他的开启方式默认开启后台线程。 首先导入命名空间:Syste...

  • Java线程通信

    线程通信 线程通信指的是多个线程在运行的期间,相互之间的数据交互协作。 1.通信方式 实现多个线程直接的协作,涉及...

网友评论

      本文标题:开启线程的多个方式

      本文链接:https://www.haomeiwen.com/subject/gflrwftx.html