本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
说我们IIS7站长博客,有一篇博文用了他们的图片。
要求我们给他们一张图片6000元。要不然法院告我们
为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!
另祝:版权碰瓷诈骗团伙,早日弃暗投明。
相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月
叹!百花齐放的时代,渐行渐远!
一、JAVA线程的本质是什么?通过本文真正了解JAVA线程
二、测试使用的Java版本:java version "1.8.0_211"
三、通过C语言来调用操作系统底层API创建线程-java语言的本质
-
操作系统Linux线程:pthread_create (创建线程)
-
如何使用pthread_create呢( man pthread_create )
-
用C语言来调用pthread_create来创建一个线程
-
代码保存为thread.c
-
将C语言代码编译成可执行文件thread.out ----- gcc thread.c -o thread.out -pthread
-
编译完成会生成一个可执行文件thread.out 然后 执行这个文件: ./thread.out
-
可以看到结果为 主线程和子线程会交替执行打印,说明的确启动了一个线程
代码3:
#include <pthread.h>
#include <stdio.h>
pthread_t pid;
void* thread_entity(void* arg) {
while(1){
usleep(100);
printf("I am new Thread\n");
}
}
int main() {
pthread_create(&pid,NULL,thread_entity,NULL);
while(1){
usleep(100);
printf("I am main\n");
}
}
View Code
四、通过Java程序调用C语言来启动线程-JNI
1)写Java代码,并附带加载C对应的库文件 - 代码1
2)编译Java代码
javac com/test/JavaCallThread.java
3)javac -h 把java文件编译一个头文件出来
cd com/test/
javac -h . JavaCallThread.java
4)按照生成的头文件中的方法名称,写一个C语言的类,并编译一个so文件,并放到环境变量中,这样Java文件就可以加载到这个C类库 - C代码2
代码编译为so文件: gcc -fPIC -I /usr/java/jdk1.8.0_211/include -I /usr/java/jdk1.8.0_211/include/linux/ -shared -o libJavaCallThreadNative.so threadNew.c
将so文件加载到内存中:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data/yqtest
注意:
5)运行Java代码,查看调用结果
运行我们编译好的Java文件: java com/test/JavaCallThread(注意环境变量中需要设置当前目录否则不能执行)
Java主代码-代码1:
package com.test;
/**
* Hello world!
*
*/
public class JavaCallThread
{
static {
System.loadLibrary( "JavaCallThreadNative" );
}
public static void main(String[] args) {
JavaCallThread callThread =new JavaCallThread();
callThread.start1();
}
private native void start1();
}
View Code
C代码2:
#include <pthread.h>
#include <stdio.h>
pthread_t pid;
void* thread_entity(void* arg) {
while(1){
usleep(100);
printf("I am new Thread\n");
}
}
// 这个名字与前面编译的头文件中的名字要一致
Java_com_test_JavaCallThread_start1() {
pthread_create(&pid,NULL,thread_entity,NULL);
while(1){
usleep(100);
printf("I am main\n");
}
}
View Code