JAVA SE(基础 第9篇) 线程(基础)

一、线程相关概念

1.  进程: 

  • 是指运行中的程序,比如使用qq,就启动了一个进程,操作系统就会为该进程分配内存空间

  •  进程是程序的一次执行,或是正在运行的程序,是动态过程,有它自身的产生、存在和消亡的过程。

2.  线程:

  • 线程由进程创建的,是进程的一个实体。

  • 一个进程可以拥有多个线程。

  • 单线程:同一时刻,只允许执行一个线程

  • 多线程:同一个时刻,可以执行多个线程

3.

  • 并发:同一个时刻,多个任务交替执行,单核cpu实现的多任务就是并发

  • 并行:同一个时刻,多个任务同时执行,多核cpu可以实现并行,并发和并行可能同时存在。

二、线程使用

1.  继承Thread创建线程:

  Cat cat = new Cat();
        cat.start();
    }
}
//当一个类继承Thread类,该类就是一个线程了
//我们会重写run方法,写上自己的代码
//run Thread类实现了 Runable接口的run方法
class  Cat extends  Thread {
        int times=0;
    @Override
    public void run() {
        while (true) {


            System.out.println("喵喵,我是小猫咪"+(++times));
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            if (times==80){
                break;//times=80,就退出
            }
        }
    }
}

2. 多线程机制:

JAVA SE(基础 第9篇) 线程(基础)_第1张图片

 

3.  实现Runnable接口:

  • java是单继承的,在某些情况下一个类可能已经继承了某个父类,这是再用继承Thread类方法来创建线程显然不可能了。

  • java设计者提供了另外一个方式创建线程,就是通过实现Runnable接口来创建线程。

 Dog dog = new Dog();
        //dog.start()不能调用
        //底层使用了静态代理模式
        Thread thread = new Thread(dog);
        thread.start();
    }
}
class  Dog implements Runnable{
        int count=0;
    @Override
    public void run() {
        while (true){
            System.out.println("小狗汪汪叫 ,hi"+(++count)+Thread.currentThread().getName());
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

4. 多线程执行:(交替/ 顺序执行)

JAVA SE(基础 第9篇) 线程(基础)_第2张图片

 

5.  继承Thread   VS   实现Runnable 的区别 

  • 从java的设计来看,通过继承Thread或者实现Runnable 接口来创建线程本质上没有区别,从jdk帮助文档我们可以看到Thread类本身就实现了Runnable接口。

  • 实现Runnable 接口方式更加适合多个线程共享一个资源的情况,并且避免了单继承的限制,建议使用Runnable接口。

JAVA SE(基础 第9篇) 线程(基础)_第3张图片

 

三、线程终止

1.  通知线程退出:

2. 线程常用方法:           

JAVA SE(基础 第9篇) 线程(基础)_第4张图片

 JAVA SE(基础 第9篇) 线程(基础)_第5张图片

 

3. 线程插队:

JAVA SE(基础 第9篇) 线程(基础)_第6张图片

 

4.  用户线程和守护线程:

  • 用户线程也叫工作线程,当线程的任务执行完成或通知方式结束

  • 守护线程一般是为工作线程服务的,当所有的用户线程结束,守护线程自动结束

  • 常见的守护线程:垃圾回收机制

5.  线程的生命周期:

JAVA SE(基础 第9篇) 线程(基础)_第7张图片

四、Synchronized(线程同步)

1.   

JAVA SE(基础 第9篇) 线程(基础)_第8张图片

 JAVA SE(基础 第9篇) 线程(基础)_第9张图片

 

2.同步原理:

3.互斥锁:

JAVA SE(基础 第9篇) 线程(基础)_第10张图片

 JAVA SE(基础 第9篇) 线程(基础)_第11张图片

 

4.  线程死锁:多个线程占用了对方的资源,但不肯想让,导致了死锁,一定要避免死锁。

5.  释放锁:

JAVA SE(基础 第9篇) 线程(基础)_第12张图片

 

你可能感兴趣的:(线程,java)