更新时间:2021-05-08 10:35:01 来源:极悦 浏览830次
1.进程
进程是操作系统中运行的一个任务(一个应用程序在一个进程中),进程(process)是一块包含了某些资源的内存区域,操作系统利用进程把它的工作划分为一些功能单元。进程中包含的一个或多个执行单元称为线程。进程还有一个私有的虚拟内存空间,该空间仅能被它所包含的线程访问。线程只能归属一个进程并且它只能访问该进程所拥有的资源。当操作系统创建一个进程后,该进程会主动申请一个主线程。
2.线程
一个线程是一个进程的顺序执行流。同类的多个线程共享一块内存空间和一组系统资源,线程本身有一个供程序执行时的堆栈。线程在切换时负荷小,因此,线程也被称为轻负荷进程,一个进程中可以包含多个线程。
3.进程和线程的区别
一个进程至少有一个线程。线程的划分尺度小于进程,使得多线程程序的并发性高。另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序运行效率。线程在执行过程中与进程的区别在于每个独立的线程有个程序运行入口、顺序执行序列和程序出口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。从逻辑角度看,多线程的意义在于一个应用程序中,有多个执行部分共同执行一个资源。
4.并发原理
多个线程“同时”运行只是我们感观上的一种表现。事实上线程是并发运行的,操作系统将时间划分为很多时间段,尽可能的均匀分配给每一个线程,获取到时间片的线程被CPU执行,其他则一直在等待。所以微观上是走走停停,宏观上都在运行。这种现象叫并发,但不是绝对意义上的同时发生。实则操作系统里面“同一时刻”只有一个线程在执行,但是处理速率快,效果上是并发运行。
5.Thread创建线程
Thread类是线程类,其每一个实例表示一个可以并发运行的线程。我们可以通过继承该类并重写run方法来定义一个具体的线程,其中要重写run方法是为了线程要执行的逻辑。启动线程时调用线程的start方法,start方法会将该线程纳入线程调度,使当前线程可以开始并发运行,当该线程获得时间片后会自动开始执行run方法内容。
public class TestThread extends Thread{
public void run(){
for(int i = 0; i < 100; i++){
System.out.println(''我是线程'');
}
}
}
定义好后实例化该对象,调用其start方法,启动线程
TestThread thread = new TestThread();
thread.start();
6.Runnable创建线程
实现Runnable接口并重写run方法来定义线程体,然后在创建线程的时候将Runnable的实例传入并启动线程。这样做的好处在于将线程和线程执行的任务分离开解耦合。同时Java是单继承,实现接口可以更好的让该类去继承其他类。
public class TestRunnable implements Runnable{
public void run(){
for(int i = 0; i < 100; i++){
System.out.println(''我是线程'');
}
}
}
定义好后,可以实例化该实现类并调用start方法启动线程
Thread thread = new Thread(new TestRunnable());
thread.start();
7.内部类创建线程
通常我们可以通过匿名内部类的方式创建线程,使用该方式可以简化编写代码的复杂度,当一个线程仅需要一个实例时我们通常使用这种方式来创建。
Thread thread = new Thread(){
public void run(){
//线程体
}
};
thread.start();
Runnable thread = new Runnable(){
public void run(){
//线程体
}
};
thread.start();
以上就是极悦小编介绍的"Java多线程并发原理",希望对大家有帮助,如有疑问,请在线咨询,有专业老师随时为您服务。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习