精华内容
下载资源
问答
  • 定时任务及多线程配置xml xml version="1.0" encoding="UTF-8"?> beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="htt

    定时任务及多线程配置xml

    复制代码
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-4.0.xsd
           http://www.springframework.org/schema/mvc
           http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
           "> 
        <!--  job start-->
        
        <!-- 定时 -->
        <bean id="ruleBean"
            class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
            <property name="targetObject" ref="ruleService" />
            <property name="targetMethod" value="updateRule" />
             
         </bean> 
    
        <bean id="rule" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
            <property name="jobDetail" ref="ruleBean" />
            <!-- 每天凌晨一点执行 -->
            <property name="cronExpression" value="0 0 1 * * ?"/>
        </bean>
        
        <!-- 定时 end -->
        
        <bean id="startQuertz" lazy-init="false" autowire="no"
            class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
             <property name="jobDetails">
              <list>
                <ref bean="ruleBean" />
              </list>
            </property>
    
            <property name="triggers">
              <list>
                 <ref bean="rule" />
              </list>
            </property>
            <!-- 启动时延期10秒开始任务 -->
            <property name="startupDelay" value="10" />
        </bean>
        
        <!--  job end-->
        
        <bean id="threadPoolTaskExecutor"
          class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
          <!-- 核心线程数,默认为1 -->
          <property name="corePoolSize" value="1" />
    
          <!-- 最大线程数,默认为Integer.MAX_VALUE -->
          <property name="maxPoolSize" value="10" />
    
          <!-- 队列最大长度,一般需要设置值>=notifyScheduledMainExecutor.maxNum;默认为Integer.MAX_VALUE
              <property name="queueCapacity" value="1000" /> -->
    
          <!-- 线程池维护线程所允许的空闲时间,默认为60s -->
          <property name="keepAliveSeconds" value="300" />
    
          <!-- 线程池对拒绝任务(无线程可用)的处理策略,目前只支持AbortPolicy、CallerRunsPolicy;默认为后者 -->
          <property name="rejectedExecutionHandler">
              <!-- AbortPolicy:直接抛出java.util.concurrent.RejectedExecutionException异常 -->
              <!-- CallerRunsPolicy:主线程直接执行该任务,执行完之后尝试添加下一个任务到线程池中,可以有效降低向线程池内添加任务的速度 -->
              <!-- DiscardOldestPolicy:抛弃旧的任务、暂不支持;会导致被丢弃的任务无法再次被执行 -->
              <!-- DiscardPolicy:抛弃当前任务、暂不支持;会导致被丢弃的任务无法再次被执行 -->
              <bean class="java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy" />
          </property>
        </bean>
       
        <bean id="contextUtil" class="com.mythopoet.util.ContextUtil"></bean>
    </beans>
    复制代码

    定时任务JAVA类

    RuleService.java

    复制代码
    @Service
    public class RuleService {
        public void updateRule(){
        
          System.out.println("定时任务启动");
        
        }
    
    }
    复制代码

    多线程配置

    StartTaskThread.java

    复制代码
    public class StartTaskThread implements Runnable {
         private List<String> list;
        
    
        public StartTaskThread(List<String> list) {
           this.list= list;
        }
        @Override
        public synchronized void run() {
               System.out.println(list.size());
        }
    }
    复制代码

    修改定时任务类,分配数据,并发布到各个线程里。

    RuleService.java

    复制代码
    @Service
    public class RuleService {
    
        public void updateRule(){
            int nums = 5;//开启5线程
            List<String> strList= new ArrayList<String>();
            for (int i = 0; i < 2000; i++) {
                strList.add("test"+i);
            }
            Map<Integer, List<String>> map = new HashMap<Integer, List<String>>();
            for (int i = 0; i < nums; i++) {
                List<String> list = new ArrayList<String>();
                map.put(i, list);
            }
            int st = 0; //起点
            int avg = strList.size()/nums; //平均值
            int count =0;//记录值
            
            for (int i = 0; i < nums; i++) {
                if(i==nums-1){
                    for (int j = count; j <strList.size(); j++) {
                        map.get(i).add(strList.get(j));
                        count++;
                    }
                    new Thread(new StartTaskThread(map.get(i)).start();
    break; } for (int j = st; j <(st+avg); j++) { map.get(i).add(strList.get(j)); count++; } st=st+avg;
                new Thread(new StartTaskThread(map.get(i)).start();
     } }
    复制代码

    取线程配置工具类,如果线程内需要操作DAO 则需要主动获取spring注入的DAO类的Bean

    ContextUtil.java

    复制代码
    import org.springframework.beans.BeansException;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationContextAware;
    
    public class ContextUtil implements ApplicationContextAware{
    
        private static ApplicationContext context;
    
        @Override
        public void setApplicationContext(ApplicationContext applicationContext)
                throws BeansException {
            context = applicationContext;
        }
    
        public static ApplicationContext getContext(){
            return context;
        }
    
        public static Object getBean(String beanName) {
            return context.getBean(beanName);
        }
    
    }
    复制代码

    获取dao写法

    RuleDAO ruleDAO =(RuleDAO) ContextUtil.getBean("ruleDAO");
                    

     

     

    使用线程池

    StartTaskThread2.java

    复制代码
    public class StartTaskThread implements Runnable {
         private String st;
        
    
        public StartTaskThread(String st) {
           this.st= st;
        }
        @Override
        public void run() {
               System.out.println(st);
        }
    }
    复制代码

    线程池

    RuleService2.java

    复制代码
    @Service
    public class RuleService {
    
        public void updateRule(){

    ThreadPoolTaskExecutor tpte =(ThreadPoolTaskExecutor)ContextUtil.getBean("threadPoolTaskExecutor");
            List<String> strList= new ArrayList<String>();
            for (int i = 0; i < 2000; i++) {
                strList.add("test"+i);
            }

            for (int i = 0; i < strList.size(); i++) {
                tpte.execute(new StartTaskThread2(strList.get(i)));
            }
    }
    复制代码
    展开全文
  • 在yocto项目中配置好eclipse的开发环境,如何配置eclipse开发出多线程程序。 普通的eclipse程序只需要在Properties->C/C++Build->Settings->Tool Settings->GCC C Linker ->Libraries中添加-pthread之后就可以编译...


    在yocto项目中配置好eclipse的开发环境,如何配置eclipse开发出多线程程序。

    普通的eclipse程序只需要在Properties->C/C++Build->Settings->Tool Settings->GCC C Linker ->Libraries中添加-pthread之后就可以编译程序了。


    但是yocto配置的eclipse编译环境中没有Tool Settings 这个选项。那么该如何设置呢?
    1.Properties->Autotools->Configure Settings -> configure ->Command   在--sysroot之前添加 -pthread
    2.Properties->Autotools->Configure Settings -> autogen ->Command 在--sysroot之前添加 -pthread


    现在就可以交叉编译yocto eclipse 的多线程程序了。

    然后通过nfs 发送到板子上,运行。能够正常运行,但是可能是板子上的核数太少了,导致线程运行起来不那么直观。


    测试程序:

    #include <stdlib.h>
    #include <stdio.h>
    #include <pthread.h>
    #include <stdio.h>
    #include <unistd.h>
    
    void* fun1(void*arg)
    {
            int i=0;
    
            for( i=0; i<10; ++i)
            {
                    printf(" thread 1 :%d \n", i);
                    usleep(1000*rand()%10);
            }
    
            return (void*)0;
    }
    
    void* fun2(void*arg)
    {
            int i=0;
    
            for( i=0; i<10; ++i)
            {
                    printf(" thread 2 :%d \n", i);
                    usleep(1000*rand()%10);
            }
    
            return (void*)0;
    }
    
    
    
    int main()
    {
            pthread_t test ;
            pthread_t test2 ;
    
            pthread_create(&test, NULL, &fun1, NULL);
            pthread_create(&test2, NULL, &fun2, NULL);
    
            printf("xxxxxxxxxxxxxxxxxxxxxxxx\n");
    
            usleep( 1000*1000) ;
    
            return 0;
    }
    


    展开全文
  • Netty多线程配置机制

    千次阅读 2013-07-19 22:18:39
    本文主要是对前一节(Netty多线程机制)中的一些未提及的有用的类(可控制可配置类)做进一步解释说明,由于NIO包和OIO包中类比较多,此文仅介绍与多线程相关的且有对外开放接口的类进行分析。 NIO包结构如下图所...

    本文主要是对前一节(Netty多线程机制)中的一些未提及的有用的类(可控制可配置类)做进一步解释说明,由于NIO包和OIO包中类比较多,此文仅介绍与多线程相关的且有对外开放接口的类进行分析。

    NIO包结构如下图所示:

    本文档主要讲解此包中的

    DefaultNioDatagramChannelConfig类、

    NioDatagramChannelConfig接口、

    NioSocketChannelConfig接口

     

    OIO包结构如下图所示:

    此包中的类各种功能与NIO包中的类的功能类似,只是适用于old I/O,添加了多播模式的支持。

    参考源码包

    以下是对类的具体说明以及重要的常用的方法的分析

    DefaultNioDatagramChannelConfig

    此类是接口NioDatagramChannelConfig的实现类,具体的使用方法参见3.2.NioDatagramChannelConfig接口分析

    NioDatagramChannelConfig

    为新的I/O(new I/O) TCP/IP协议提供数据报管道配置,主要是配置DatagramChannel的参数的。以下是一些常用的参数:

     

     

     

     

     

    Name

    Associated setter method

    "writeBufferHighWaterMark"

    默认 64 * 1024用法未知

    "writeBufferLowWaterMark"

    默认 32 * 1024用法未知

    "writeSpinCount"

    默认 16(重复写次数,用法未知

    "broadcast"

    true / false 多播模式(UDP适用)

    "interface"

    多播数据包的网络接口地址

    "loopbackModeDisabled"

    实际调用的是channel.setOption(StandardSocketOptions.IP_MULTICAST_LOOP, loopbackModeDisabled);仅针对JDK7+有效

    "networkInterface"

    实际调用的是channel.setOption(StandardSocketOptions.IP_MULTICAST_IF, networkInterface);仅针对JDK7+有效

    "reuseAddress"

    地址是否可复用(UDP socket address绑定时用到)

    "receiveBufferSize"

    数据包接收大小

    "receiveBufferSizePredictor"

    数据包接收大小:默认设置为FixedReceiveBufferSizePredictor(768),超过后丢弃

    "receiveBufferSizePredictorFactory"

    似乎与上面的功能相同,设置方式:new FixedReceiveBufferSizePredictorFactory(1024)

    "sendBufferSize"

    发送数据包大小

    "timeToLive"

    JDK7+版本有效

    "trafficClass"

    0<=tc<=255

    bufferFactory"

    用于创建ChannelBuffer的工厂,默认HeapChannelBufferFactory

    "connectTimeoutMillis"

    连接超时时间(毫秒)

    "pipelineFactory"

    仅适用于child channel 创建时有效

    "keepAlive"

    启用/禁用Nagle算法

    "soLinger"

    Socket关闭时的延迟时间(单位:秒)

    "tcpNoDelay"

    启用/禁用Nagle算法

     

     

     

    NioSocketChannelConfig

    具体配置查看3.2 NioDatagramChannelConfig

    Demo实现
    SocketSetver

    public static void tcpServerStartUp() {

            TCPSERVER_BOOTSTRAP.setPipelineFactory(new TCPServerPipelineFactory(EXECUTION_UP_HANDLER,EXECUTION_DOWN_HANDLER));

    //        TCPSERVER_BOOTSTRAP.setOption("child.tcpNoDelay", true);

    //        TCPSERVER_BOOTSTRAP.setOption("child.keepAlive", true);

    //        TCPSERVER_BOOTSTRAP.setOption("reuseAddress", true);

    //        LOGGER.info("SERVER_NAME:"+Constants.SERVER_NAME);

    //        LOGGER.info("TCPSERVER_PORT:"+Constants.TCPSERVER_PORT);

    //        TCPSERVER_BOOTSTRAP.bind(new InetSocketAddress(Constants.SERVER_NAME,Constants.TCPSERVER_PORT));

            TCPSERVER_BOOTSTRAP.setOptions(Constants.CHANNEL_CONFIGER_MAP);

            TCPSERVER_BOOTSTRAP.bind();

            LOGGER.info("TCP服务已启动....");

    Constants

     

    CHANNEL_CONFIGER_MAP.put("writeBufferHighWaterMark", 64*1024);

            CHANNEL_CONFIGER_MAP.put("writeBufferLowWaterMark", 32*1024);

            CHANNEL_CONFIGER_MAP.put("writeSpinCount", 16);

            CHANNEL_CONFIGER_MAP.put("broadcast", true);

            CHANNEL_CONFIGER_MAP.put("interface", new InetSocketAddress(Constants.SERVER_NAME,Constants.TCPSERVER_PORT));

            CHANNEL_CONFIGER_MAP.put("loopbackModeDisabled", true);

            CHANNEL_CONFIGER_MAP.put("networkInterface", new InetSocketAddress(Constants.SERVER_NAME,Constants.TCPSERVER_PORT));

            CHANNEL_CONFIGER_MAP.put("localAddress", new InetSocketAddress(Constants.SERVER_NAME,Constants.TCPSERVER_PORT));

            CHANNEL_CONFIGER_MAP.put("reuseAddress", true);

            CHANNEL_CONFIGER_MAP.put("receiveBufferSize", 10000);

            CHANNEL_CONFIGER_MAP.put("receiveBufferSizePredictor", new FixedReceiveBufferSizePredictor(100000));

            CHANNEL_CONFIGER_MAP.put("receiveBufferSizePredictorFactory", new FixedReceiveBufferSizePredictorFactory(100000));

            CHANNEL_CONFIGER_MAP.put("sendBufferSize", 10000);

            CHANNEL_CONFIGER_MAP.put("timeToLive", 30);

            CHANNEL_CONFIGER_MAP.put("trafficClass", 100);

            CHANNEL_CONFIGER_MAP.put("bufferFactory", new HeapChannelBufferFactory());

            CHANNEL_CONFIGER_MAP.put("connectTimeoutMillis", 60000);

            CHANNEL_CONFIGER_MAP.put("pipelineFactory", new TCPServerPipelineFactory(new ExecutionHandler(

         new OrderedMemoryAwareThreadPoolExecutor(16, 1048576, 1048576),false,true), new ExecutionHandler(

         new OrderedDownstreamThreadPoolExecutor(16),true,false)));

    展开全文
  • 生产上有几个定时任务都是同时间点要执行的,最近发现有的定时任务不执行了,后来经过查资料发现@schedule注解默认是单线程的,...关于schedule多线程配置整理了如下几种配置方式。 第1种:增加配置类 @Configurati

    生产上有几个定时任务都是同时间点要执行的,最近发现有的定时任务不执行了,后来经过查资料发现@schedule注解默认是单线程的,如果定时任务比较多或者有的定时任务比较耗时,会影响到其他定时任务的执行。后来查找原因是有个定时任务在sql取数的时候连了几个大表查询,并且相关联查询的字段没有设置索引,导致sql查询超时,影响到了其他定时任务的执行。解决办法是对相关表设置正确的索引,schedule改为多线程执行。关于schedule多线程的配置整理了如下几种配置方式。

    第1种:增加配置类

    @Configuration
    public class ScheduleConfig {
        /**
         * 修复同一时间无法执行多个定时任务问题。@Scheduled默认是单线程的
         */
        @Bean
        public TaskScheduler taskScheduler() {
            ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
            //核心线程池数量,方法: 返回可用处理器的Java虚拟机的数量。
            taskScheduler.setPoolSize(Runtime.getRuntime().availableProcessors() * 2);
            return taskScheduler;
        }
    }
    

    第2种:其实和第一种一样

    @Configuration
    public class ScheduleConfig1 implements SchedulingConfigurer {
        @Override
        public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
            scheduledTaskRegistrar.setScheduler(
                    new ScheduledThreadPoolExecutor(Runtime.getRuntime().availableProcessors() * 2)
            );
        }
    }
    

    第3种:配置文件添加task配置

    server:
      port: 8081
    spring:
      application:
        name: daily-task
      task:
        scheduling:
          pool:
            size: 8 #配置Scheduled定时任务为多线程
    

    第4种:添加@EnableAsync注解,在相应方法上添加@Async注解

    @SpringBootApplication
    @EnableScheduling
    @EnableAsync
    public class TaskApplication {
        public static void main(String[] args) {
            SpringApplication.run(TaskApplication.class, args);
        }
    }
    
    @Component
    public class TestAJob {
        private static final Logger logger = LoggerFactory.getLogger(TestAJob.class);
    
        @Async
        @Scheduled(cron = "*/2 * * * * ?")
        public void testA() throws InterruptedException {
            Thread.sleep(10000);
            logger.info("testA 执行==============");
        }
    }
    
    @Component
    public class TestBJob {
        private static final Logger logger = LoggerFactory.getLogger(TestBJob.class);
        
        @Async
        @Scheduled(cron = "*/2 * * * * ?")
        public void testB() {
            logger.info("testB 执行==============");
        }
    }
    
    展开全文
  • System.out.println("xxxxxx**********"); String data = evt.getData(); System.out.println(data);
  • 使用ForkJoinPool完成多线程配置

    千次阅读 2018-05-30 17:48:08
    新建自己的bean类,在类中完成多线程方法书写package com.wisest.monitor.service.app.homepage.impl; import com.wisest.monitor.dao.ViewHourGasMapper; import java.sql.SQLException; import java.util.HashMap...
  • 问题:eclipse使用pthread.h遇到“pthread_create”未定义的问题。 解决方法: a.需要在编译时添加-lpthread参数 ...在eclipse中配置 project>properties>c/c++Build>GCC C++Linker>Libraries 在Li
  • SpringBoot配置多线程

    千次阅读 2018-07-17 11:38:06
    在SpringBoot项目中配置和...1.多线程配置: /** * 线程池配置 * * @author dongchuan */ @Configuration @EnableAsync public class AsyncTaskConfig implements AsyncConfigurer { private static final L...
  • Java多线程之线程池配置合理线程数

    千次阅读 2019-05-30 20:11:52
    Java多线程之线程池配置合理线程数 目录 代码查看公司服务器或阿里云是几核的 合理线程数配置之CPU密集型 合理线程数配置之IO密集型 1. 代码查看公司服务器或阿里云是几核的 要合理配置线程数首先要知道公司...
  • 万字图解Java多线程

    万次阅读 多人点赞 2020-09-06 14:45:07
    java多线程我个人觉得是javaSe中最难的一部分,我以前也是感觉学会了,但是真正有多线程的需求却不知道怎么下手,实际上还是对多线程这块知识了解不深刻,不知道多线程api的应用场景,不知道多线程的运行流程等等,...
  • VS2010配置C/C++多线程使用环境

    千次阅读 2015-11-08 16:02:13
    介绍VS2010中多线程环境配置方法。
  • SpringBatch配置多线程step

    万次阅读 2017-11-03 11:36:45
    使用tasklet的task-executor属性可以很容易的将普通的step转成多线程的step。 task-executor:任务执行处理器,定义后采用多线程执行任务,需要考虑线程安全问题。 throttle-limit:最大使用线程池数目。 如果...
  • Scheduling 配置多线程

    千次阅读 2018-08-02 10:00:13
    * 定时任务以多线程的形式进行运行 * */ @Configuration @EnableScheduling public class ScheduleConfig implements SchedulingConfigurer, AsyncConfigurer { public void configureTasks...
  • 《VS配置pthread多线程库》

    千次阅读 2018-05-16 10:52:03
    我的配置:windows10+VS2010一、下载pthread多线程库1、pthread多线程库下载地址:ftp://sourceware.org/pub/pthreads-win32里面有三种格式提供下载,exe、tag.gz、zip,选择一个较新的版本下载2...
  • Java多线程超详解

    万次阅读 多人点赞 2019-06-11 01:00:30
    随着计算机的配置越来越高,我们需要将进程进一步优化,细分为线程,充分提高图形化界面的多线程的开发。这就要求对线程的掌握很彻底。 那么话不多说,今天本帅将记录自己线程的学习。 线程的相关API //获取当前...
  • 这篇文章主要讲解在Linux终端和Eclipse(IDE)下怎么配置OpenHEVC的多线程解码.注意运行系统环境均为Ubuntu.首先,我们的ffmpeg工程已经配置好,可以正确运行(参照这篇文章) ,接下来我们要配置OpenHEVC多线程解码的话,...
  • SpringBoot配置多线程运用 SpringBoot配置多线程整体两步走,配置线程池.使用异步处理. 配置线程池 在你的项目Configure包中,添加异步配置类. 具体代码 @Configuration @EnableAsync public class AsyncTaskConfig...
  • 深入浅出CMake(四):配置多线程

    千次阅读 2019-10-14 16:55:13
    我们知道,直接用 g++ 编译多线程代码时,可以这样。 gcc -o test test.c -lpthread 但是,如果整个工程是 CMake 构建的,需要怎么做呢? 修改 CMakeFileLists.txt 文件。 假设,要链接的目标叫做 test,只需要简单 ...
  • Httpclient 多线程调用,高效配置

    千次阅读 2018-04-09 11:42:19
    最近公司通过API接口调用数据,本人搞了多线程调用。起初每次调用都单独 new HttpClient(),造成问题是内存越跑占用越大,请求越来越慢,甚至出现 Read Time Out 异常。之后了解HttpClient可复用,则改为单例请求,...
  • CodeBlock 下 配置 多线程

    千次阅读 2015-03-21 08:17:23
    对与CodeBlock下加入pthread 总是出现报错的情况的详细的解法!
  • 多进程与多线程区别

    万次阅读 多人点赞 2016-04-21 10:01:16
    在Unix上编程采用多线程还是多进程的争执由来已久,这种争执最常见到在C/S通讯中服务端并发技术 的选型上,比如WEB服务器技术中,Apache是采用多进程的(perfork模式,每客户连接对应一个进程,每进程中只存在唯一一...
  • SpringBoot自带的Scheduled,可以将它看成一个轻量级的Quartz,默认情况下是单线程的,也就是无论同时有多少个任务需要执行,都需要排队等待某个任务完成之后才能继续下一个任务。下面两种方式可以配置为并行方式: ...
  • Linux Eclipse配置C++多线程开发环境

    千次阅读 2013-11-28 09:24:26
    Linux系统下的多线程遵循POSIX线程接口,称为pthread。编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使用库libpthread.a。 头文件直接#include 就可以了,编译器能够自动找到。 链接库libpthread...
  • cmake配置基本工程和多线程

    万次阅读 2016-08-06 16:59:28
    大家都知道自linux上些的c/c++程序,在编译链接单个或者个文件时为了方便,我们都会写一个MakeFile文件,然后在命令行执行make命令。cmake就是生成MakeFile文件的工具。 这是cmake的下载地址...
  • Eclipse下配置C++多线程pthread.h

    千次阅读 2015-11-01 13:57:28
    Eclipse下配置C++多线程,pthread.h
  • 前言: 最近在工作中需要将一大批数据导入到数据库...最开始是使用的正常的普通方式去写入,但是量太大了,所以就尝试使用多线程来写入。下面我们就来介绍一下怎么使用多线程进行导入。 1.文本格式 格式就是类似于这...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 686,976
精华内容 274,790
关键字:

多线程配置