java多线程的深入分析

1.进程与线程的区别

    1.1 进程通常是指一个应用程序,进程的启动就意味着该改程序的主线程启动,不同的进程拥有这不同的内存空间,而不同的线程有共享的内存空间,一个进程包含多个线程

2.java中如何创建线程

    2.1 继承Thread类

    2.2 实现Runnable接口

3.线程中run()与start()的区别

    3.1 run方法是指一个线程要执行的内容

    3.2 start方法是指将线程的状态变成就绪状态,线程是否执行是取决于cup的调度

4.线程中的调度

    4.1 sleep方法:线程休眠多长时间

    4.2 join方法: 等待join方法的线程变成消亡状态

    4.3 setPriority方法:设置线程的优先级,值越大 获取cup调度的资源就越大

    4.4 yeild方法:线程让步,让当前线程变成就绪状态,虽然说是让步但是很有可能立即执行

    4.5 stop方法:强制停止当前线程,但是这样做不安全,因此jdk标记成了过时方法

    4.6 interrupt方法:优雅停止线程(设置一个可以停止线程的信号,实际上停止与否应该看线程所执行的业务结果可以通过isinterrupt来判断当前线程是否可以停止)

5.线程的状态

    

 

6.并行于并发

  6.1 并行真正的意义上的同时执行

  6.2 通过CPU的调度,同一时刻只有一个线程执行

7.并发带来的问题

   多线程,原子,可见,有序,详细讲解:

    7.1 原子性:同一个线程在执行的的时候不能被其他线程打断

    7.2 可见性:当线程改变一个值后一定要让其他线程看到最新的结果 volitile:可见性关键字,保证线程一定能够获取到主内存最新更改的值

    7.3 即程序执行的顺序按照代码的先后顺序执行

8.wait于sleep的区别

   1: wait是Object里边的发方法,sleep是Thread的方法

   2: wait会自动释放锁,sleep不会

   3: wait必须配合sychronized关键字一起使用

9.实现死锁

package com.zhibo.zyw.bdnq.test;
import com.zhibo.zyw.bdnq.test.DeadLock.*;
/** * @program: ThreadProject * @author: zyw * @create: 2018-06-26 18:14 **/ public class ProducerAndConsumer { public static void main(String[] args) { Thread thread1 = new Thread(new DeadLockThread(true)); Thread thread2 = new Thread(new DeadLockThread(false)); thread1.start(); thread2.start(); } }
package com.zhibo.zyw.bdnq.test;

/**
 * @program: ThreadProject
 * @author: zyw
 * @create: 2018-06-26 18:22
 **/
public class DeadLock {
    private static Object monitor1 = new Object();
    private static Object monitor2 = new Object();

    public static class DeadLockThread implements Runnable {

        private boolean type;

        public DeadLockThread(boolean type) {
            this.type = type;
        }

        @Override
        public void run() {
            if (type) {
                synchronized (monitor1) {
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                synchronized (monitor2) {

                }
            } else {
                synchronized (monitor2) {
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                synchronized (monitor1) {

                }
            }
        }
    }
}

 今天小编就先写到这里,有什么疑问的可以留言欧!

猜你喜欢

转载自www.cnblogs.com/zhaoyuwei/p/9230721.html