精华内容
下载资源
问答
  • SpringBoot除了jar\war启动的方式,还有一种启动方式:目录启动方式 目录启动方式可以帮助解决过去的jar不支持spring boot新方式,比如老版本的MyBatis 在META-INF/MANIFEST.MF中找到两个指定属性  Main-Class:...

    SpringBoot除了jar\war启动的方式,还有一种启动方式:目录启动方式

    目录启动方式可以帮助解决过去的jar不支持spring boot新方式,比如老版本的MyBatis

    在META-INF/MANIFEST.MF中找到两个指定属性

      Main-Class:org.springframework.boot.loader.JarLauncher

      Start-Class:com.base.app

    1.如果是jar包,启动的是

      org.springframework.boot.loader.JarLauncher

    2.如果是war包,启动的是

      org.springframework.boot.loader.WarLauncher

    展开全文
  • SwitchButton 开关按钮的多种实现方式源码

    万次下载 热门讨论 2014-04-15 19:32:29
    SwitchButton 开关按钮的多种实现方式 具体的说明等可以查看以下文章: http://blog.csdn.net/vipzjyno1/article/details/23707149
  • 多线程的几种实现方式

    万次阅读 多人点赞 2019-02-25 15:33:38
    上篇文章总结了下关于线程池很干,很干的干货,这次想着顺便连其他实现多线程的三种方式也汇总下吧! java多线程的几种实现方式: 1.继承Thread类,重写run方法 2.实现Runnable接口,重写run方法,实现Runnable...

    上篇文章总结了下关于线程池很干,很干的干货,这次想着顺便连其他实现多线程的三种方式也汇总下吧!

    java多线程的几种实现方式:

    1.继承Thread类,重写run方法
    2.实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函数的target
    3.通过Callable和FutureTask创建线程
    4.通过线程池创建线程  (上一篇已经讲过了)

    前面两种可以归结为一类:无返回值,原因很简单,通过重写run方法,run方式的返回值是void,所以没有办法返回结果 
    后面两种可以归结成一类:有返回值,通过Callable接口,就要实现call方法,这个方法的返回值是Object,所以返回的结果可以放在Object对象中

    方式1:继承Thread类的线程实现方式如下:

    public class ThreadDemo01 extends Thread{
        public ThreadDemo01(){
            //编写子类的构造方法,可缺省
        }
        public void run(){
            //编写自己的线程代码
            System.out.println(Thread.currentThread().getName());
        }
        public static void main(String[] args){ 
            ThreadDemo01 threadDemo01 = new ThreadDemo01(); 
            threadDemo01.setName("我是自定义的线程1");
            threadDemo01.start();       
            System.out.println(Thread.currentThread().toString());  
        }
    }


    程序结果: 
    Thread[main,5,main] 
    我是自定义的线程1

    线程实现方式2:通过实现Runnable接口,实现run方法,接口的实现类的实例作为Thread的target作为参数传入带参的Thread构造函数,通过调用start()方法启动线程

    public class ThreadDemo02 {
    
        public static void main(String[] args){ 
            System.out.println(Thread.currentThread().getName());
            Thread t1 = new Thread(new MyThread());
            t1.start(); 
        }
    }
    
    class MyThread implements Runnable{
        @Override
        public void run() {
            // TODO Auto-generated method stub
            System.out.println(Thread.currentThread().getName()+"-->我是通过实现接口的线程实现方式!");
        }   
    }


    程序运行结果: 
    main 
    Thread-0–>我是通过实现接口的线程实现方式!

    线程实现方式3:通过Callable和FutureTask创建线程 
    a:创建Callable接口的实现类 ,并实现Call方法 
    b:创建Callable实现类的实现,使用FutureTask类包装Callable对象,该FutureTask对象封装了Callable对象的Call方法的返回值 
    c:使用FutureTask对象作为Thread对象的target创建并启动线程 
    d:调用FutureTask对象的get()来获取子线程执行结束的返回值

    public class ThreadDemo03 {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    
            Callable<Object> oneCallable = new Tickets<Object>();
            FutureTask<Object> oneTask = new FutureTask<Object>(oneCallable);
    
            Thread t = new Thread(oneTask);
    
            System.out.println(Thread.currentThread().getName());
    
            t.start();
    
        }
    
    }
    
    class Tickets<Object> implements Callable<Object>{
    
        //重写call方法
        @Override
        public Object call() throws Exception {
            // TODO Auto-generated method stub
            System.out.println(Thread.currentThread().getName()+"-->我是通过实现Callable接口通过FutureTask包装器来实现的线程");
            return null;
        }   
    }


    程序运行结果: 
    main 
    Thread-0–>我是通过实现Callable接口通过FutureTask包装器来实现的线程

    线程实现方式4:通过线程池创建线程

    public class ThreadDemo05{
    
        private static int POOL_NUM = 10;     //线程池数量
    
        /**
         * @param args
         * @throws InterruptedException 
         */
        public static void main(String[] args) throws InterruptedException {
            // TODO Auto-generated method stub
            ExecutorService executorService = Executors.newFixedThreadPool(5);  
            for(int i = 0; i<POOL_NUM; i++)  
            {  
                RunnableThread thread = new RunnableThread();
    
                //Thread.sleep(1000);
                executorService.execute(thread);  
            }
            //关闭线程池
            executorService.shutdown(); 
        }   
    
    }
    
    class RunnableThread implements Runnable  
    {     
        @Override
        public void run()  
        {  
            System.out.println("通过线程池方式创建的线程:" + Thread.currentThread().getName() + " ");  
    
        }  
    }  


    程序运行结果: 
    通过线程池方式创建的线程:pool-1-thread-3 
    通过线程池方式创建的线程:pool-1-thread-4 
    通过线程池方式创建的线程:pool-1-thread-1 
    通过线程池方式创建的线程:pool-1-thread-5 
    通过线程池方式创建的线程:pool-1-thread-2 
    通过线程池方式创建的线程:pool-1-thread-5 
    通过线程池方式创建的线程:pool-1-thread-1 
    通过线程池方式创建的线程:pool-1-thread-4 
    通过线程池方式创建的线程:pool-1-thread-3 
    通过线程池方式创建的线程:pool-1-thread-2

    ExecutorService、Callable都是属于Executor框架。返回结果的线程是在JDK1.5中引入的新特征,还有Future接口也是属于这个框架,有了这种特征得到返回值就很方便了。 
    通过分析可以知道,他同样也是实现了Callable接口,实现了Call方法,所以有返回值。这也就是正好符合了前面所说的两种分类

    执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到Callable任务返回的Object了。get方法是阻塞的,即:线程无返回结果,get方法会一直等待。

    再介绍Executors类:提供了一系列工厂方法用于创建线程池,返回的线程池都实现了ExecutorService接口。

    public static ExecutorService newFixedThreadPool(int nThreads) 
    创建固定数目线程的线程池。
    public static ExecutorService newCachedThreadPool() 
    创建一个可缓存的线程池,调用execute 将重用以前构造的线程(如果线程可用)。如果现有线程没有可用的,则创建一个新线程并添加到池中。终止并从缓存中移除那些已有 60 秒钟未被使用的线程。
    public static ExecutorService newSingleThreadExecutor() 
    创建一个单线程化的Executor。
    public static ScheduledExecutorService newScheduledThreadPool(int 
    corePoolSize) 
    创建一个支持定时及周期性的任务执行的线程池,多数情况下可用来替代Timer类。
    ExecutoreService提供了submit()方法,传递一个Callable,或Runnable,返回Future。如果Executor后台线程池还没有完成Callable的计算,这调用返回Future对象的get()方法,会阻塞直到计算完成。

    总结:

    引用阿里的关于  线程的建议:

    展开全文
  • 寻址方式

    万次阅读 2018-04-25 15:53:14
    计算机系统中有七种基本的寻址方式:立即寻址方式、寄存器寻址方式、直接寻址方式、寄存器间接寻址方式、寄存器相对寻址方式、基址加变址寻址方式和相对基址加变址寻址方式。其中,后五种寻址方式是确定内存单元有效...

    8086寻址方式

    什么是寻址方式

    寻址方式就是处理器根据指令中给出的地址信息来寻找有效地址的方式,是确定本条指令的数据地址以及下一条要执行的指令地址的方法。

    七种寻址方式

    计算机系统中有七种基本的寻址方式:立即寻址方式、寄存器寻址方式、直接寻址方式、寄存器间接寻址方式、寄存器相对寻址方式、基址加变址寻址方式和相对基址加变址寻址方式。其中,后五种寻址方式是确定内存单元有效地址的五种不同的计算方法,用它们可方便地实现对数组元素的访问。

    立即寻址方式

    操作数作为指令的一部分。

    例如:

    mov ax, 0x4e20
    ; ax中数据为0x4e20

    寄存器寻址方式

    操作数存放在寄存器中,通过指定寄存器来获取数据。

    例如:

    ; 假定ax中数据为0x4e20
    mov bx, ax
    ; bx中数据为0x4e20

    直接寻址方式

    指令所要的操作数存放在内存中,在指令中直接给出该操作数的有效地址。

    在通常情况下,操作数存放在数据段中。所以,默认情况下操作数的物理地址由数据段寄存器 ds 中的值和指令中给出的有效地址直接形成。

    例如:

    ; 假定ds中的数据为0x1000
    mov ax, [0x1234]
    ; 执行这条指令之后,内存单元0x11234和0x11235中的值(一个字(word))被放入ax

    但是如果在指令中使用段超越前缀指定使用的段,则可以从其他段中取出数据。

    例如:

    ; 假定es中的数据为0x2000
    mov ax, es:[0x1234]
    ; 执行这条指令之后,内存单元0x21234和0x21235中的值被放入ax

    8086有20根地址总线,但8086又是16位结构的,所以通过如下方式计算物理地址:

    物理地址 = 段地址 * 16 + 段内偏移

    物理地址 = 段地址 << 4 + 段内偏移

    寄存器间接寻址方式

    操作数有效地址在 sidibxbp 这四个寄存器之一中。在不使用段超越前缀的情况下,如果有效地址在 sidibx 中,则以段寄存器 ds 中的内容为段值。如果有效地址在 bp 中,则以段寄存器 ss 中的内容为段值。

    例如:

    ; 假定ds中的值为0x1000di中的值为0x2345
    mov ax, [di]
    ; 执行这条指令后,内存单元0x12345和0x12346中的值被放入ax

    寄存器相对寻址方式

    操作数的有效地址是一个基址寄存器( bxbp )或变址寄存器( sidi )的值加上指令中给定的8位或16位偏移量之和。

    在不使用段超越前缀的情况下,如果有效地址在 sidibx 中,则以段寄存器 ds 中的内容为段值。如果有效地址在 bp 中,则以段寄存器 ss 中的内容为段值。

    在指令中给定的8位或16位偏移量采用补码形式表示。在计算有效地址时,如偏移量是8位,则被带符号扩展成16位。

    例如:

    ; 假定ds中的值为0x1000,di中的值为0x2345
    mov ax, [di + 0x1234]
    ; 有效地址为0x1000 * 16 + 0x2345 + 0x1234 = 0x13579
    ; 执行这条指令后,内存单元0x13579和0x1357a中的值被放入ax

    基址加变址寻址方式

    操作数的有效地址由基址寄存器( bxbp )之一的值与变址寄存器( sidi )之一的值相加得到。

    在不使用段超越前缀的情况下,如果 bp 中的值作为有效地址的一部分,则以 ss 中的值为段值,否则以 ds 中的值为段值。

    例如:

    mov ax, [bx][si]
    ; mov ax, [bx + si]
    ; mov ax, [si][bx]
    ; 以上几种方式等价

    这种寻址方式可以很方便的定位数组中的各个元素。

    相对基址加变址寻址方式

    基本同上,只是增加了偏移量。

    例如:

    mov ax, 0x1000[bx][si]
    ; mov ax, [bx + si + 0x1000]
    ; mov ax, 0x1000[si][bx]
    ; mov ax, 0x1000[bx + si]
    ; 以上几种方式等价

    更多资料

    [1] 《汇编语言(第三版)》(王爽著)

    展开全文
  • spring-boot的三种启动方式

    万次阅读 多人点赞 2018-03-10 14:50:35
    直接进入正题吧,今天记录spring-boot项目的三种启动方式。spring-boot的启动方式主要有三种: 1. 运行带有main方法类 2. 通过命令行 java -jar 的方式 3. 通过spring-boot-plugin的方式一、执行带有main方法类 这种...

    有段时间没有写博客了,也在努力的从传统单机开发向分布式系统过度,所以再次做一些笔记,以方便日后查看。

    直接进入正题吧,今天记录spring-boot项目的三种启动方式。

    spring-boot的启动方式主要有三种:

        1. 运行带有main方法类

        2. 通过命令行 java -jar 的方式

        3. 通过spring-boot-plugin的方式

    一、执行带有main方法类

        这种方式很简单,我主要是通过idea的方式,进行执行。这种方式在启动的时候,会去自动加载classpath下的配置文件

        (这里只是单独的强调了classpath下,其实spring-boot有自己的加载路径和优先级的,日后在发布).

    @RestController
    @EnableAutoConfiguration
    public class Example {
    
        @RequestMapping("/")
        public String home() {
            return "Hello World";
        }
    
        public static void main(String[] args) {
            /**
             * SpringApplication会自动加载application.properties文件,具体的加载路径包含以下:
             * <p>
             *     1. A <b>/config</b> subdirectory of the current directory;
             *     <p/>
             * <p>
             *     2. The Current Directory
             * </p>
             * <p>
             *     3. A classpath /config package
             * </p>
             * <p>
             *     4. The classpath root.
             * </p>
             */
            SpringApplication.run(Example.class, args);
        }
    }
    

    在idea中,可以通过配置application的方式配置上自己请求参数

     

    二、通过java -jar的方式

    java -jar jar_path --param

    jar_path: 指代将项目打包为jar打包之后的存储路径

    --param: 为需要在命令行指定的参数。例如:

    java -jar emample.jar --server.port=8081

    该命令通过在启动行指定了项目启动后绑定的端口号,因为该命令行参数,将会覆盖application.properties中的端口配置

     

    三、通过spring-boot-plugin方式启动

    如果需要正常使用该maven查件,需要我们在maven项目中增加以下插件配置:

    <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <!--<version>${spring.boot.version}</version>-->
                    <!--<executions>-->
                        <!--<execution>-->
                            <!--<goals>-->
                                <!--<goal>repackage</goal>-->
                            <!--</goals>-->
                        <!--</execution>-->
                    <!--</executions>-->
                </plugin>

     

    注: 因为我在项目中指定了父模块 spring-boot-starter-parent。因此我不需要单独指定插件版本,该父模块会自动匹配与当前spring-boot版本相匹配的查件版本。

     

    <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.10.RELEASE</version>
    
            <!--<groupId>com.spring.sourcecode</groupId>-->
            <!--<artifactId>learn.spring</artifactId>-->
            <!--<version>1.0-SNAPSHOT</version>-->
        </parent>

    准备工作做好之后,我们需要进入项目的根目录,执行

    mvn spring-boot:run

    该命令能够正常启动项目,但是如何为其指定执行参数呢?

    spring-boot:run该maven查件在插件首页中指定了相关能够使用的可选参数:

    通过查阅文档,可以通过命令的方式查看具体选项的意义以及用法:

    mvn spring-boot:help -Ddetail

     

    其中arguments的描述中,大意为:指定的参数会传递给具体应用,如果有多个参数需要指定,以","进行分割。具体用法通过run.arguments来指定:

     

    mvn spring-boot:run -Drun.arguments="--server.port=8888"

    以上就是三种启动方式的描述,我也是第一次学习,做一下笔记吧!

    展开全文
  • JAVA数组的3种赋值方式

    万次阅读 2021-02-23 17:41:02
    基本数据类型数组的3种赋值方式 第一种赋值方式 int[] arr = {1,2,3}; 第二种赋值方式 int[] arr2 = new int[]{1,2,3}; 第三种赋值方式 int[] arr3 = new int[3]; arr3[0] = 1; arr3[1] = 2; arr3[2] = 3;
  • Windows 设置文件默认打开方式

    万次阅读 多人点赞 2019-04-14 12:08:15
    【前言】 计算机是现在办公必用品,如何熟练使用自己的计算机从而提高自己的...今天在此为大家介绍一招设置文件的默认打开方式。 【设置方式】 一、重复操作: 1.每次打开一个计算机未设置默认打开方式的...
  • 程序查询方式 注:在程序查询方式中,当I/O设备较多时,CPU需按各个I/O设备在系统中的优先级进行逐级查询 注:在程序查询方式的程序流程中,由于传送的往往是一批数据,因此需要设置I/O设备与主机交换数据的...
  • 七种寻址方式

    万次阅读 多人点赞 2018-08-09 17:36:36
    七种基本的寻址方式:立即寻址,寄存器寻址,直接寻址,寄存器间接寻址,寄存器相对寻址,基址变址寻址,相对基址变址寻址。其中,后五种寻址方式(即直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址和相对...
  • 操作系统中的几种I/O控制方式

    万次阅读 多人点赞 2018-09-28 16:53:42
    按照I/O控制器功能的强弱以及和 CPU 之间联系方式的不同,可以把 I/O 设备的控制方式和通道控制方式分为四类:直接程序控制方式、中断驱动控制方式、直接存储器访问(DMA)控制方式和通道控制方式。I/O控制方式发展...
  • ASP.NET Core Filter的注册方式有哪些? 方法注册:只对方法生效 控制器注册:对控制器中的所有方法生效 全局注册:对整个项目生效;
  • WIFI模块各种常见的配网方式说明及其比较

    万次阅读 多人点赞 2017-11-25 13:48:37
    WIFI模块各种常见的配网方式说明及其比较 本文汇总介绍了目前市面上各种WIFI模块的常见的配网方式的原理和实现,对比了各种配网方式的优势和局限,得出结论,WEB配网是最直接、最简单、最灵活、约束条件最少的配网...
  • 51单片机定时器工作方式1、2原理详解

    万次阅读 多人点赞 2019-08-09 18:38:36
    51单片机方式1、2的详解:写在前面知识填充方式一工作原理初值的设定代码实现方式二工作原理初值的设定代码实现 写在前面 1.本篇博文旨在帮助那些像我一样刚入门51单片机,如果你对定时器有一定了解,但是其中的的...
  • Feign消费服务时POST/GET请求方式

    万次阅读 多人点赞 2018-06-23 18:59:14
    总体说明 ... 服务消费者这边feign调用时,指明为GET方式(注:如果不指明method,那么在条件1满足的情况下,采用的是默认的GET方式)。 注:这里条件1和条件2,是“且”的关系(都满足时,才为GE...
  • LTE调制方式

    千次阅读 2018-06-29 12:17:40
    下行物理信道及其功能:主要有BPSK,QPSK,16QAM以及64QAM根据具体功能及信道环境,选择合适的调制方式
  • 请列出常见的缓存方式,并简要概述其优缺点。 客户端缓存,本地缓存,反向代理缓存,分布式缓存;
  • C#初始化数组的三种方式

    万次阅读 2018-07-17 12:32:51
    C#初始化数组的三种方式 实现方式:C#初始化数组的三种方式
  • Shell脚本入门:编写格式与执行方式

    万次阅读 2020-10-22 23:57:23
    文章目录Shell脚本入门:编写格式与执行方式目标Shell脚本文件编写规范脚本文件后缀名规范首行格式规范注释格式shell脚本HelloWord入门案例需求效果脚本文件的常用执行3种方式介绍3种方式的区别执行脚本方式1-sh命令...
  • USB 四种传输方式详解

    万次阅读 2019-01-10 13:57:09
    传输方式 USB,有四种的传输方式,控制(Control),同步(isochronous),中断(interrupt),大量(bulk)。如果你是从硬件开始来设计整个的系统,你还要正确选择传输的方式,而作为一个驱动程序的书写者,就只需要弄...
  • 登录方式总结

    万次阅读 2018-06-07 16:45:18
    下面就让我们一起来总结常见的登录方式。 一、点(用户)对点(系统)之用户密码登录(token不变) 具体流程: 用户发送用户名与密码给服务器,服务器根据它们查询数据库,如果获取到可用用户,则缓存用户auth(userid,...
  • 将表单数据发送给服务器的常用方式有两种:Get和Post。 浏览器发送给服务器的HTTP请求分为:请求头(header)和请求主体(body)两部分。 其中,必须包含头部分,用于指定发送请求的方式、目的地以及其他关键信息...
  • RecycleView 实现复杂首页布局三种方式

    千次下载 热门讨论 2016-04-08 11:40:21
    RecycleView 实现复杂首页布局三种方式:嵌套、自定义布局管理器、三方控件。实现效果如淘宝,美团,bilibili等
  • 三种常用的数字数据编码方式

    万次阅读 2019-04-25 14:26:28
    对于这种编码方式,具体用什么样的数字信号 表示 0 或 1 就是编码。 衍生出来的编码方式有很多,下面介绍三种最常见的编码方式。 不归零码 用高,低电压分别来代表 1,0 二进制(相反也可以)。 优点: 1.编码...
  • 快捷方式图标变白完美解决

    万次阅读 多人点赞 2018-12-12 11:34:28
    annotation:explorer.exe是Windows程序管理器或者文件资源管理器...解决方式:把图标缓存的数据库删除 第一步:win+r cmd进入命令行 第二步:一行一行键入如下命令 taskkill /im explorer.exe /f cd /d %u...
  • 编译方式和解释方式的区别

    千次阅读 2011-12-14 14:52:06
    这种“翻译”通常有两种方式,即编译方式和解释方式。  两者的区别如下:  解释方式:程序运行时,去一条指令,将其转化为机器指令,再执行这条机器指令。  编译方式:程序运行时之前,将程序的所有代码编译为...
  • python中的编码方式

    万次阅读 2018-06-29 00:24:07
    说明这里我们以python2.7为例讲解python的编码方式指定执行编码方式python2.7的默认编码方式为ascii字符集,这里所说的编码方式指执行编码方式,在编程过程中,有三个地方都涉及到编码方式:分别是源码编码方式(.py...
  • eNSP配置Telnet三种远程登录方式

    万次阅读 多人点赞 2018-07-05 00:20:42
    拓扑结构 配置好两个路由器的IP地址 ...此种方式,亲测不能实现,没有这种方式,只有两种模式,分别是password、aaa 方式二:password方式,需要提供密码 方式三:aaa方式,需要提供账号和密码 ...
  • Ubuntu18.04添加桌面快捷方式

    万次阅读 2018-08-26 21:42:02
    添加快捷方式,超简单 这里以google-chrome为例 我在网上看了好几篇关于添加快捷方式的方法,感觉都比较麻烦,不知道是旧版Ubuntu的原因还是什么。 1.打开/usr/share/applications/ 2.找到自己要添加的应用,...
  • 8255A的工作方式控制字

    千次阅读 2019-12-17 16:39:30
    B口4种方式方式1有选通信号,方式0是无条件的输入输出方式(程序控制方式)没有选通信号 PC的高四位 A口有三种工作方式 到底输入输出由D4来决定 D7固定1 同一个地址既有方式控制字还有复位置位控制字 例题...
  • 如何让自己的软件出现在打开方式的列表中呢? 通过设置AndroidManifest.xml文件即可: <activity android:name=".MainActivity" android:label="@string/app_name" android:launchMode="singleTask" android:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,299,024
精华内容 4,519,609
关键字:

方式