JAVA的多线程和Native的用法
发布日期:2022-02-06 00:27:00
浏览次数:26
分类:技术文章
本文共 2550 字,大约阅读时间需要 8 分钟。
线程概述
计算机的操作系统多采用多任务和分式设计,多任务是指在一个操作系统中可以同时运行多个程序,即有多个独立运行的任务,每个任务对应一个进程,每个进程也可产生多个线程。
进程
认识进程先从程序开始,程序是对数据描述与操作的代码的集合,如Office中的word,暴风影音等应用程序。
进程是程序的一次动态执行过程,它对应了从代码的加载,执行至执行完毕的一个完整过程,这个过程也是进程本身从产生,发展至消亡的过程。
进程的特点
进程是系统运行程序的基本单位 每一个进程都有自己独立的一块内存空间,一组系统资源 每一个进程的内部数据和状态都是完全独立的线程
线程是进程中执行运算的最小单位,可完成一个独立的顺序控制流程。每个进程中,必须至少建立一个线程(这个线程称为主线程)来作为这个程序运行的入口点。如果在一个线程中同时运行了多个线程,用来完成不同的工作,则称之为“多线程”。
多线程的好处
充分利用CPU的资源,大大提高了资源利用率 简单编程模型,简化了程序逻辑,这样更有助于开发人员对程序的理解和维护 带来良好的用户体验,由于多个线程可以交替执行,减少或避免了因程序阻塞或意外情况造成的响应过慢现象,降低了用户等待的几率java的主线程
如何控制主线程:public class ThreadDemo { public static void main(String args[]) { Thread t= Thread.currentThread(); System.out.println("当前线程是: "+t.getName()); t.setName("MyJavaThread"); System.out.println("当前线程名是: "+t.getName()); }}
结果:当前线程是:main
当前线程名是:MyJavaThread线程的状态
任何线程一般都具有五种状态:创建,就绪,运行,阻塞,死亡状态。下面的代码描述了其中的状态:
public class Mythread implements Runnable{ public void run() { try { System.out.println("线程t在运行!"); Thread.sleep(500); System.out.println("线程t在短时间睡眠后重新运行!"); } catch (InterruptedException IE) { System.out.println("线程被中断"); } } public static void main(String args[]) { Thread t=new Thread(new Mythread()); System.out.println ("线程 t 为新建!"); t.start(); System.out.println ("线程 t 为就绪!"); }}
运行结果:
线程 t 为新建! 线程 t 为就绪! 线程t在运行! 线程t在短时间睡眠后重新运行!线程的休眠
public class ThreadSleepDemo { public static void main(String[] args) { System.out.println("Wait"); Wait.bySec(5); // 让主线程等待5秒种再执行 System.out.println("start"); }}class Wait { public static void bySec(long s) { for (int i = 0; i < s; i++) { System.out.println(i + 1 + "秒"); try { Thread.sleep(1000); // 睡眠1秒 } catch (InterruptedException e) { e.printStackTrace(); } } }}
运行结果
线程实例调用start()方法和直接调用run()有什么区别? 调用start()方法表示该线程处于启动状态,等待操作系统分配资源执行 run()方法中的代码,在多个线程同时处于启动状态时,线程是交替执行的,而直接调用run()方法和之前学习过的调用示例方法没有区别,程序是按顺序执行的,属于单线程执行模式。---------------------------------------------分割线----------------------------------------------------------
native
为什么使用native:
Java不是完美的,Java的不足除了体现在运行速度上要比传统的C++慢许多之外,Java无法直接访问到操作系统底层(如系统硬件等),为此Java使用native方法来扩展Java程序的功能使用步骤:
1、在Java中声明native()方法,然后编译。 2、用javah产生一个.h文件。 3、写一个.cpp文件实现native导出方法,其中需要包含第二步产生的.h文件(注意其中又包含了JDK带的jni.h文件)。 4、将第三步的.cpp文件编译成动态链接库文件。 5、在Java中用System.loadLibrary()方法加载第四步产生的动态链接库文件,这个native()方法就可以在Java中被访问了。示例代码如下:
public class HelloWorld { public native void displayHelloWorld();//所有native关键词修饰的都是对本地的声明 static { System.loadLibrary("hello");//载入本地库 } public static void main(String[] args) { new HelloWorld().displayHelloWorld(); }}
转载地址:https://blog.csdn.net/weixin_46175284/article/details/105497268 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年03月31日 15时48分11秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
大流量、高负载场景 Nginx+Linux 性能调优
2019-04-28
K8S 从懵圈到熟练:读懂此文,集群节点不下线!
2019-04-28
超全|138 条 Vim 命令、操作、快捷键全集
2019-04-28
高逼格企业级MySQL数据库备份方案,原来是这样....
2019-04-28
深度好文:Nginx 是如何启动并处理 http 请求的?
2019-04-28
请收藏 | Linux运维常见故障及处理的 32 个锦囊妙计
2019-04-28
19 个强大、有趣、又好玩的 Linux 命令!
2019-04-28
推荐 10 个不错的网络监视工具
2019-04-28
使用 Docker-compose 一键部署gitlab
2019-04-28
10 年经验告诉你:运维的真正价值在哪里?
2019-04-28
送书|3台廉价机器每秒写入2百万!Kafka为什么那么快?
2019-04-28
极简教程|20 分钟玩转Ansible系列手册!
2019-04-28
附全文下载 |《数字中国指数报告2019》重磅发布!!
2019-04-28
黑客入侵 linux 系统常用手段,有你不知道的没?
2019-04-28
强大!Nginx 配置在线一键生成“神器”
2019-04-28
强大!Nginx 配置在线一键生成“神器”
2019-04-28
10 个简单小技巧助你快速成为Linux高手!
2019-04-28
这样的老板,真想把他拖进WC爆zou一顿.....
2019-04-28
不掉坑,不背锅!史上最全的服务器安全管理规范开源了(内有彩蛋)
2019-04-28
除了负载均衡,Nginx还可以做很多,限流、缓存、黑白名单等
2019-04-28