• java并发(一):初探线程的创建


    线程的创建两种方式

    创建线程有四种方式,今天主要演示的是两种:继承Thread,实现Runable接口

    继承Thread创建线程

    import lombok.extern.slf4j.Slf4j;
    
    
    @Slf4j
    class MyThread extends Thread{
        private  int count=0;
        @Override
        public void run(){
            for(int i=0;i<10;i++){
                if(count<10){
                    log.info("{} :counter ={}",this.getName(),count++);
                }
    
            }
    
        }
    
    }
    @Slf4j
    public class ThreadTest {
        public static void main(String[] args) {
           MyThread m1=new MyThread();
           MyThread m2=new MyThread();
           m1.start();
           m2.start();
        }
    }
    

    测试结果

    2019-07-24 14:25:22,725   [Thread-0] INFO  MyThread  - Thread-0 :counter =0
    2019-07-24 14:25:22,725   [Thread-1] INFO  MyThread  - Thread-1 :counter =0
    2019-07-24 14:25:22,725   [Thread-1] INFO  MyThread  - Thread-1 :counter =1
    2019-07-24 14:25:22,725   [Thread-1] INFO  MyThread  - Thread-1 :counter =2
    2019-07-24 14:25:22,725   [Thread-0] INFO  MyThread  - Thread-0 :counter =1
    2019-07-24 14:25:22,725   [Thread-0] INFO  MyThread  - Thread-0 :counter =2
    2019-07-24 14:25:22,725   [Thread-1] INFO  MyThread  - Thread-1 :counter =3
    2019-07-24 14:25:22,725   [Thread-0] INFO  MyThread  - Thread-0 :counter =3
    2019-07-24 14:25:22,725   [Thread-1] INFO  MyThread  - Thread-1 :counter =4
    2019-07-24 14:25:22,725   [Thread-1] INFO  MyThread  - Thread-1 :counter =5
    2019-07-24 14:25:22,725   [Thread-1] INFO  MyThread  - Thread-1 :counter =6
    2019-07-24 14:25:22,725   [Thread-1] INFO  MyThread  - Thread-1 :counter =7
    2019-07-24 14:25:22,725   [Thread-1] INFO  MyThread  - Thread-1 :counter =8
    2019-07-24 14:25:22,725   [Thread-1] INFO  MyThread  - Thread-1 :counter =9
    2019-07-24 14:25:22,725   [Thread-0] INFO  MyThread  - Thread-0 :counter =4
    2019-07-24 14:25:22,741   [Thread-0] INFO  MyThread  - Thread-0 :counter =5
    2019-07-24 14:25:22,741   [Thread-0] INFO  MyThread  - Thread-0 :counter =6
    2019-07-24 14:25:22,741   [Thread-0] INFO  MyThread  - Thread-0 :counter =7
    2019-07-24 14:25:22,741   [Thread-0] INFO  MyThread  - Thread-0 :counter =8
    2019-07-24 14:25:22,741   [Thread-0] INFO  MyThread  - Thread-0 :counter =9
    
    Process finished with exit code 0
    
    

    说明

    两个线程,各自的变量,交替运行

    实现Runable接口创建线程

    import lombok.extern.slf4j.Slf4j;
    
    @Slf4j
    public class RunableTest {
        public static void main(String[] args) {
            //内部类寄生于外部类,需要先创建外部类的对象
            RunableTest test = new RunableTest();
            MyThread m1 = test.new MyThread();
            //两个线程共享一个对象
            Thread t1 = new Thread(m1);
            Thread t2 = new Thread(m1);
            t1.start();
            t2.start();
    
        }
    
        class MyThread implements Runnable {
            public int count = 0;
    
    
            @Override
            public void run() {
                for (int i = 0; i < 10; i++) {
                    //runable只继承了getClass方法
                    if(count<10){
                        log.info("{} :counter ={}", Thread.currentThread().getName(), count++);
                    }
    
                }
            }
        }
    
    }
    

    测试结果

    
    2019-07-24 14:26:40,722   [Thread-1] INFO  RunableTest  - Thread-1 :counter =1
    2019-07-24 14:26:40,722   [Thread-0] INFO  RunableTest  - Thread-0 :counter =0
    2019-07-24 14:26:40,737   [Thread-0] INFO  RunableTest  - Thread-0 :counter =3
    2019-07-24 14:26:40,737   [Thread-0] INFO  RunableTest  - Thread-0 :counter =4
    2019-07-24 14:26:40,737   [Thread-0] INFO  RunableTest  - Thread-0 :counter =5
    2019-07-24 14:26:40,737   [Thread-0] INFO  RunableTest  - Thread-0 :counter =6
    2019-07-24 14:26:40,737   [Thread-0] INFO  RunableTest  - Thread-0 :counter =7
    2019-07-24 14:26:40,737   [Thread-0] INFO  RunableTest  - Thread-0 :counter =8
    2019-07-24 14:26:40,737   [Thread-0] INFO  RunableTest  - Thread-0 :counter =9
    2019-07-24 14:26:40,737   [Thread-1] INFO  RunableTest  - Thread-1 :counter =2
    
    Process finished with exit code 0
    

    说明

    两个线程,共享一个对象,交替运行。

  • 相关阅读:
    3500常用汉字与标点符号(已排除不支持GB2312的)
    http报头正文开头会有一个整数的问题
    Arduino "Card failed, or not present"(即找不到SD卡)错误解决方案
    Arduino运行时突然[卡死在某一行/立即重启/串口输出乱码/程序执行不正常]的可能原因
    C++编程常见错误
    本地Apache服务器访问时502 Server dropped connection 错误解决方法
    Borůvka (Sollin) 算法求 MST 最小生成树
    搜索算法总结:迭代加深、双向、启发式
    三分法
    状压 DP:[USACO06NOV] Corn Fields,[USACO13NOV] No Change
  • 原文地址:https://www.cnblogs.com/JuncaiF/p/11246823.html
Copyright © 2020-2023  润新知