白话多线程和java多线程实现的几种方法
一、理解多线程和多进程
多线程实现的原理
java中多线程的状态和调用方法
二、了解jvm中的内存划分
三、多线程的实现方法
方法一:通过Thread的方式来实现
方法二:通过Runnable的方法来实现(常用)
方法三:通过Called的方式来实现
方法四:通过JUC的方法来实现(常用)
ThreadLocal
四、JVM多线程的实现原理
五、看看synchronize和volatile这个东西的实质
在java中,每一个对象有且仅有一个同步锁。这也意味着,同步锁是依赖于对象而存在。
实例锁 -- 锁在某一个实例对象上。如果该类是单例,那么该锁也具有全局锁的概念。
实例锁对应的就是synchronized关键字。
全局锁 -- 该锁针对的是类,无论实例多少个对象,那么线程都共享该锁。
全局锁对应的就是static synchronized(或者是锁在该类的class或者classloader对象上)。
第一条: 当一个线程访问“某对象”的“synchronized方法”或者“synchronized代码块”时,其他线程对“该对象”的该“synchronized方法”或者“synchronized代码块”的访问将被阻塞。
第二条: 当一个线程访问“某对象”的“synchronized方法”或者“synchronized代码块”时,其他线程仍然可以访问“该对象”的非同步代码块。
第三条: 当一个线程访问“某对象”的“synchronized方法”或者“synchronized代码块”时,其他线程对“该对象”的其他的“synchronized方法”或者“synchronized代码块”的访问将被阻塞。
“synchronized方法”是用synchronized修饰方法,而 “synchronized代码块”则是用synchronized修饰代码块。
synchronized代码块可以更精确的控制冲突限制访问区域,有时候表现更高效率。
六、wait()、notify()、notifyAll()、yield() 、sleep()方法的比较
wait()其中会释放同步锁
yield()其中不会释放同步锁
sleep()其中不会释放同步锁