线程同步的方法:sychronized,lock,reentrantLock,Condition等
在讲解之前 先要了解java线程和os线程的关系
/**
* @Author: small_double
* @Date: 2019/9/23 下午4:16
* 自定义一个 开启一个线程的类 不经过jvm
*/
public class ThreadLee {
static {
System.loadLibrary("LeeThreadNative");
}
public static void main(String[] args) {
ThreadLee threadLee = new ThreadLee();
threadLee.start0();
}
// //这个run方法,要让C程序员调用到,就完美了
// java --> new object --> obj.method()
// c --> JNIEnv--> 获取java虚拟机 -->new obj-->obj.method
// 以下是 c代码
// java 虚拟机去 Jclass cls = findClass
// ->Jmethod cid = GetMethodId(env,cls,"<init>","()V") 找到无参构造方法
// ->Jobject obj = NewObject(env,cls,cid); new obj
// ->Jmethod mid = GetMethodId(env,cls,"run","()V")找到 run方法
// -> CallIntMethod(env,obj,mid,NULL) 回调run()方法
//
public void run(){
System.out.println("I am Thread");
}
// 调用本地方法, 2
//这个方法要参考.h文件的15行代码,这里的参数得注意,你写死就行,不用明白为什么
//JNIEXPOR void JNICALL Java_com_LeeThread_start0
// (JNIEnv *env, jobject c1){
// pthread_create 第三个参数 就是方法体 及 run方法 start_thread()
// pthread_create(&pid,NULL,thread_entity,NULL);
// 利用JNI c 反调 java 程序
private native void start0();
}thread.start() 调用 run方法的原理
wait 与while 配合使用
synchronized
锁的膨胀过程
Last updated
Was this helpful?
