• Java线程入门第一篇


    Java线程的状态有6种

    1、  初始(NEW):新创建了一个线程对象,但还没有调用start()方法。

    2、  运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。(什么是就绪) 线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(ready)。(什么是运行)就绪状态的线程在获得CPU时间片后变为运行中状态(running)。

    3、  阻塞(BLOCKED):表示线程阻塞于锁。

    4、  等待(WAITING):进入该状态的线程需要等待其他线程做出一些特定动作(通知或中断)。

    5、  超时等待(TIMED_WAITING):该状态不同于WAITING,它可以在指定的时间后自行返回。

    6、  终止(TERMINATED):表示该线程已经执行完毕。

    Java创建线程

    1、  继承thread类

    /**
     * Created by buer on 2018/12/21.
     */
    public class ThreadTest extends Thread{
        @Override
        public void run() {
            System.out.println("我是1线程");
        }
    
    
        public static void main(String[] args) {
            new ThreadTest().start();
        }
    }

    2、  实现Runnable接口

      a) Runabnle接口

      b) 实例代码

    /**
     * Created by buer on 2018/12/21.
     */
    public class ThreadTest {
    
        //JAVA7的方法
        Thread i1 =  new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("我是 i1 线程");
            }
        });
    
        //java8的方法lambda
        Thread i2 = new Thread(()->System.out.println("我是 i2 线程"));
    //    @Override
    //    public void run() {
    //        System.out.println("sss");
    //    }
    
        public static void main(String[] args) {
            ThreadTest threadTest =  new ThreadTest();
            threadTest.i1.start();
            threadTest.i2.start();
        }
    }

      结果2种:

     

      或者

      由于线程调度不确定,导致结果不一致(需要操作系统的知识)

    3、  使用callable(有返回值)和future

    死锁实例

    /**
     * Created by buer on 2018/9/23.
     */
    public class DeadLockDemo {
    
        //要用静态变量
        private static String A = "A";
        private static String B = "B";
        public static void main(String[] args) {
            new DeadLockDemo().deadLock();
        }
    
    
        private void deadLock() {
            Thread t1 = new Thread(new Runnable() {
                @Override
                public void run() {
                    synchronized (A){
                        try{
                            Thread.currentThread().sleep(2000);
                        }catch (Exception e) {
                            e.printStackTrace();
                        }
                        synchronized (B) {
                            System.out.println("1");
                        }
                    }
                }
            });
    
            Thread t2 = new Thread(new Runnable() {
                @Override
                public void run() {
                    synchronized (B) {
                        synchronized (A) {
                            System.out.println("2");
                        }
                    }
                }
            });
    
            t1.start();
            t2.start();
        }
    
    }

      

  • 相关阅读:
    【BZOJ3995】[SDOI2015]道路修建 线段树区间合并
    [Noip2016]天天爱跑步 LCA+DFS
    【BZOJ2870】最长道路tree 点分治+树状数组
    【BZOJ3730】震波 动态树分治+线段树
    【BZOJ2969】矩形粉刷 概率+容斥
    【BZOJ3029】守卫者的挑战 概率+背包
    【BZOJ3043】IncDec Sequence 乱搞
    【BZOJ3124】[Sdoi2013]直径 树形DP(不用结论)
    Django学习笔记之ORM多表操作
    SQL学习笔记之项目中常用的19条MySQL优化
  • 原文地址:https://www.cnblogs.com/chenzhuantou/p/10162872.html
Copyright © 2020-2023  润新知