创建线程的多种方式

 1 public class Demo1 extends Thread{
 2
 3     @Override
 4     public void run() {
 5         while(!interrupted()) {
 6             System.out.println(getName()+"线程执行了");
 7             try {
 8                 Thread.sleep(200);
 9             } catch (InterruptedException e) {
10                 // TODO Auto-generated catch block
11                 e.printStackTrace();
12             }
13
14         }
15     }
16
17     public static void main(String[] args) {
18         Demo1 d1 = new Demo1();
19         Demo1 d2 = new Demo1();
20
21         d1.start();
22         d2.start();
23
24         d1.interrupt();
25
26     }
27
28
29 }

 1 public class Demo2 implements Runnable {
 2
 3     @Override
 4     public void run() {
 5         while(true) {
 6             System.out.println("thread running ...");
 7         }
 8
 9     }
10
11
12     public static void main(String[] args) {
13         Thread thread = new Thread(new Demo2());
14         thread.start();
15     }
16
17
18 }

public class Demo3 {

    public static void main(String[] args) {

      //继承thread类子类方式
      /*new Thread() {
            public void run() {
                System.out.println("thread start ...");
            };
        }.start();
        */

        //实现runnable接口
/*        new Thread(new Runnable() {
            public void run() {
                System.out.println("thread start ...");
            }
        }).start();*/

        new Thread(new Runnable() {

            @Override
            public void run() {
                System.out.println("runnable");

            }

        }) {
            @Override
            public void run() {
            System.out.println("sub");

            }
        }.start();

        //sub 重写了父类的run方法
    }

 1 public class Demo4 implements Callable<Integer>{ //指定返回类型
 2
 3     public static void main(String[] args) throws Exception {
 4         Demo4 d = new Demo4();
 5         //class FutureTask<V> implements Runnables RunnableFuture<V>
 6             //   --- interface RunnableFuture<V> extends Runnable,Future<V> 对线程任务进行封装
 7
 8         FutureTask<Integer> task = new FutureTask<>(d);
 9
10         Thread t = new Thread(task);
11         t.start();
12
13         Integer result = task.get();
14         System.out.println("线程执行结果为:"+result);
15     }
16
17     @Override
18     public Integer call() throws  Exception {
19         System.out.println("正在进行紧张计算");
20         Thread.sleep(3000);
21         return 1;
22     }
23
24 }

 1 public class Demo5 {
 2
 3
 4     public static void main(String[] args) {
 5
 6         Timer timer = new Timer();
 7
 8         // abstract class TimerTask implements Runnable
 9         timer.schedule(new TimerTask() {
10
11             @Override
12             public void run() {
13                 //实现定时任务
14                 System.out.println("timertask is running");
15             }
16         }, 0, 1000);
17         //java.util.Timer.schedule(TimerTask task, long delay, long period)
18
19     }
20
21 }

 1 public class Demo6 {
 2
 3     public static void main(String[] args) {
 4
 5         Executor threadPool = Executors.newFixedThreadPool(10);//固定容量的线程池
 6
 7         for(int i = 0;i<10; i++ ) {
 8             threadPool.execute(new Runnable() {
 9
10                 @Override
11                 public void run() {
12                     System.out.println(Thread.currentThread().getName());
13                 }
14             });
15         }
16     }
17 }

 1 public class Demo7 {
 2
 3     public static void main(String[] args) {
 4         List<Integer> values = Arrays.asList(10,20,30,40);  //  Arrays.asList(array):将数组array转化为List
 5         int res = new Demo7().add(values);
 6         System.out.println("计算结果为:"+res);
 7     }
 8     public int add(List<Integer> values) {
 9         values.parallelStream().forEach(System.out :: println);
10         return 0;
11
12         //        30
13         //        20
14         //        10
15         //        40
16         //        计算结果为:0
17         //parallelStream 并行执行
18         // return values.parallelStream().mapToInt(a -> a).sum();
19
20     }
21
22 }

新建spring boot工程,pom 中引入spring-context依赖

//Config.java

@Configuration
@ComponentScan("com.roocon.thread.t1")
@EnableAsync
public class Config {

}

//DemoService

@Service
public class DemoService {

    @Async
    public void a() {
        while(true) {
            System.out.println("a");
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }

    }

    @Async
    public void b() {
        while(true) {
            System.out.println("b");
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }

    }

}
public class Main {

    public static void main(String[] args) {
        AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(Config.class);
         DemoService ds = ac.getBean(DemoService.class);

         ds.a();
         ds.b();

    }

}

原文地址:https://www.cnblogs.com/quyangyang/p/10359954.html

时间: 2024-11-07 11:45:32

创建线程的多种方式的相关文章

使用docker创建静态网站应用-多种方式

原文:使用docker创建静态网站应用-多种方式 能承载静态网站的服务器有很多,本文使用,nginx.apache.tomcat服务器演示docker静态网站应用设置 一,创建docker文件, 不同服务器的docker文件不一样,下面分别创建nginx.apache.tomcat三个服务器的docker文件,其实主要就是区别于FROM标签于项目文件目录 目录结构褥子: 1,nginx 的 docker文件 FROM nginx COPY ./www /usr/share/nginx/html/

java多线程 -- 创建线程的第三者方式 实现Callable接口

Java 5.0 在 java.util.concurrent 提供了一个新的创建执行线程的方式:Callable 接口Callable 接口类似于 Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的.但是 Runnable 不会返回结果,并且无法抛出经过检查的异常.Callable 需要依赖FutureTask ,FutureTask 也可以用作闭锁. 例子: package com.company; import java.util.concurrent.Callable;

11.09创建控制器和创建视图的多种方式

(一) 创建控制器的四种方法 (1)sb // 传niu就相当于[NSBundle mainbundle]: UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MYStoryBoard" bundle:nil]; self.window.rootViewController = [sb instantiateInitialViewController]; (2)sb+可重用标示 UIStoryboard *sb = [UISto

05_创建线程三种方式对比

[采用实现Runnable.Callable接口方式创建多线程] [优点]1.线程只是实现了Runable接口或者Callable接口,还可以继承其它类. 2.在这种方式下,多个线程可以共享同一个target对象,比较适合多个相同线程来处理同一份资源的情况. [缺点] 编程略复杂,如果需要访问当前线程,则必须使用Thread currentThread()方法. [采用继承Thread类来创建多线程] [优点] 编写简单,如果需要访问当前线程,只需使用this即可获得当前线程. [缺点] 因为继

[ javascript 创建随机颜色 ] 多种方式来创建随机颜色

8 在制作饼图或标签云时,我们通常需要很多颜色,方法有二.一是准备一组漂亮的候选颜色,二是随机生成颜色.在数量很多或不明确时,我想后者就是唯一的出路了.谷歌了一下,整理如下,按由浅入深的顺序排列. 10 实现1 11 12 var getRandomColor = function(){ 13 return '#' + 14 (function(color){ 15 return (color += '0123456789abcdef'[Math.floor(Math.random()*16)]

java创建线程的三种方式及其对比

Java中创建线程主要有三种方式: 一.继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此把run()方法称为执行体. (2)创建Thread子类的实例,即创建了线程对象. (3)调用线程对象的start()方法来启动该线程. package com.thread; public class FirstThreadTest extends Thread{ int i = 0; //重写run方法,run方法的方

java创建线程的三种方式及其对照

Java中创建线程主要有三种方式: 一.继承Thread类创建线程类 (1)定义Thread类的子类.并重写该类的run方法,该run方法的方法体就代表了线程要完毕的任务.因此把run()方法称为运行体. (2)创建Thread子类的实例,即创建了线程对象. (3)调用线程对象的start()方法来启动该线程. package com.thread; public class FirstThreadTest extends Thread{ int i = 0; //重写run方法.run方法的方

Java创建线程的三种主要方式

Java创建线程的主要方式 一.继承Thread类创建 通过继承Thread并且重写其run(),run方法中即线程执行任务.创建后的子类通过调用 start() 方法即可执行线程方法. 通过继承Thread实现的线程类,多个线程间无法共享线程类的实例变量.(需要创建不同Thread对象,自然不共享) 例子: /** * 通过继承Thread实现线程 */ public class ThreadTest extends Thread{ private int i = 0 ; @Override

java中线程池创建的几种方式

java中创建线程池的方式一般有两种: 通过Executors工厂方法创建 通过new ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue)自定义创建 Executors工厂方法创建 package com.javaBase.LineDistancePond; import java.util.