白话多线程和java多线程实现的几种方法

一、理解多线程和多进程

多线程实现的原理

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()其中不会释放同步锁