java多线程的深入分析
Posted zhaoyuwei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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) { } } } } }
今天小编就先写到这里,有什么疑问的可以留言欧!
以上是关于java多线程的深入分析的主要内容,如果未能解决你的问题,请参考以下文章
java多线程--------深入分析 ThreadLocal 内存泄漏问题