JAVA的多线程和Native的用法

线程概述

计算机的操作系统多采用多任务和分式设计,多任务是指在一个操作系统中可以同时运行多个程序,即有多个独立运行的任务,每个任务对应一个进程,每个进程也可产生多个线程。

进程

认识进程先从程序开始,程序是对数据描述与操作的代码的集合,如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();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值