多线程基础之线程创建
2018-03-27 16:29
211 查看
什么是进程
进程是操作系统中运行的一个任务(一个应用程序运行在一个进程中).
进程(process)是一块包含了某些资源的内存区域,操作系统利用进程把它的工作划分为一些功能单元。
进程中所包含的一个或多个执行单元称为线程(thread)。进程还拥有一个私有的虚拟地址空间,该空间仅能被它所含的线程访问。
线程只能归属于一个进程并且它只能访问该进程所拥有的资源。当操作系统创建一个进程后,该进程会自动申请一个名为主线程或首要线程的线程。
什么是线程
一个线程是进程的一个顺序执行流。
同类的多个线程共享一块内存空间和一组系统资源,线程本身有一个供程序执行的堆栈.线程在切换时负荷小,因此,线程也被称为轻负荷进程。一个进程中可以包含多个线程。
进程与线程的区别
一个进程至少有一个线程。
线程的划分尺度小于进程,使得多线程程序的并发性高。另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
线程在执行过程中与进程的区别在于每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用来实现进程的调度和管理以及资源分配。
线程使用的场合
线程通常用于在一个程序中需要同时完成多个任务的情况。我们可以将每个任务定义为一个线程,使他们得以一同工作。
也可以用于在单一线程中可以完成,但是使用多线程可以更快的情况。比如下载文件。
并发原理
多个线程“同时”运行只是我们感官上的一种表现。事实上线程是并发运行的,OS将时间划分为很多时间片段(时间片),尽可能均匀分配给每一个线程,获取时间片段的线程被CPU运行,而其他线程全部等待。所有微观上是走走停停的,宏观上都在运行。这种现象叫并发。但绝不是绝对意义上的"同时发生"。
线程状态
创建线程
Thread类是线程类,其每一个实例表示一个可以并发运行的线程。我们可以通过继承该类并重写run方法来定义一个具体的线程。其中重写run方法的目的是定义该线程要执行的逻辑。启动线程时调用线程的start()方法而非直接调用run()方法。start()方法会将当前线程纳入线程调度,使当前线程可以开始并发运行。在线程获取时间片段后会自动开始执行run方法中的逻辑。
public class TestThread extends Thread{
@Overrider
public void run(){
for(int i=0;i<100;i++){
System.out.println("我是线程");}}}
定义好后,可以实例化并调用start方法启动线程
Thread thread=new TestThread();//实例化线程
thread.start(); //启动线程
使用Runnable创建并启动线程
实现Runnable接口并重写run方法来定义线程体,然后在创建线程的时候将Runnable的实例传入并启动线程。
这样做的好处在于可以将线程与线程要执行的任务分离开减少耦合,同时java是单继承的,定义一个类实现Runnable接口这样的做法可以更好的去实现其他父类或接口。因为接口是多继承关系。
public class TestRunnable implements Runnable{
@Override
public void run(){
for(int i=0;i<100;i++){
System.out.println("我是线程");}}}
定义好后,可以实例化并调用start方法启动线程
Runnable runnable=new TestRunnable();
Thread thread=new Thread(runnable); //实例化线程并传入线程体
thread.start(); // 启动线程
使用内部类创建线程
通常我们可以通过匿名内部类的方式创建线程,使用该方式可以简化编写代码的复杂度,当一个线程仅需要一个实例时我们通常使用这种方式来创建。
创建线程
Thread thread=new Thread(){
public void run(){
//线程体}};
thread.start(); //启动线程
Runnable runnable=new Runnable(){
public void run(){}};
Thread thread=new Thread(runnable);
thread.start(); //启动线程
进程是操作系统中运行的一个任务(一个应用程序运行在一个进程中).
进程(process)是一块包含了某些资源的内存区域,操作系统利用进程把它的工作划分为一些功能单元。
进程中所包含的一个或多个执行单元称为线程(thread)。进程还拥有一个私有的虚拟地址空间,该空间仅能被它所含的线程访问。
线程只能归属于一个进程并且它只能访问该进程所拥有的资源。当操作系统创建一个进程后,该进程会自动申请一个名为主线程或首要线程的线程。
什么是线程
一个线程是进程的一个顺序执行流。
同类的多个线程共享一块内存空间和一组系统资源,线程本身有一个供程序执行的堆栈.线程在切换时负荷小,因此,线程也被称为轻负荷进程。一个进程中可以包含多个线程。
进程与线程的区别
一个进程至少有一个线程。
线程的划分尺度小于进程,使得多线程程序的并发性高。另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
线程在执行过程中与进程的区别在于每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用来实现进程的调度和管理以及资源分配。
线程使用的场合
线程通常用于在一个程序中需要同时完成多个任务的情况。我们可以将每个任务定义为一个线程,使他们得以一同工作。
也可以用于在单一线程中可以完成,但是使用多线程可以更快的情况。比如下载文件。
并发原理
多个线程“同时”运行只是我们感官上的一种表现。事实上线程是并发运行的,OS将时间划分为很多时间片段(时间片),尽可能均匀分配给每一个线程,获取时间片段的线程被CPU运行,而其他线程全部等待。所有微观上是走走停停的,宏观上都在运行。这种现象叫并发。但绝不是绝对意义上的"同时发生"。
线程状态
创建线程
Thread类是线程类,其每一个实例表示一个可以并发运行的线程。我们可以通过继承该类并重写run方法来定义一个具体的线程。其中重写run方法的目的是定义该线程要执行的逻辑。启动线程时调用线程的start()方法而非直接调用run()方法。start()方法会将当前线程纳入线程调度,使当前线程可以开始并发运行。在线程获取时间片段后会自动开始执行run方法中的逻辑。
public class TestThread extends Thread{
@Overrider
public void run(){
for(int i=0;i<100;i++){
System.out.println("我是线程");}}}
定义好后,可以实例化并调用start方法启动线程
Thread thread=new TestThread();//实例化线程
thread.start(); //启动线程
使用Runnable创建并启动线程
实现Runnable接口并重写run方法来定义线程体,然后在创建线程的时候将Runnable的实例传入并启动线程。
这样做的好处在于可以将线程与线程要执行的任务分离开减少耦合,同时java是单继承的,定义一个类实现Runnable接口这样的做法可以更好的去实现其他父类或接口。因为接口是多继承关系。
public class TestRunnable implements Runnable{
@Override
public void run(){
for(int i=0;i<100;i++){
System.out.println("我是线程");}}}
定义好后,可以实例化并调用start方法启动线程
Runnable runnable=new TestRunnable();
Thread thread=new Thread(runnable); //实例化线程并传入线程体
thread.start(); // 启动线程
使用内部类创建线程
通常我们可以通过匿名内部类的方式创建线程,使用该方式可以简化编写代码的复杂度,当一个线程仅需要一个实例时我们通常使用这种方式来创建。
创建线程
Thread thread=new Thread(){
public void run(){
//线程体}};
thread.start(); //启动线程
Runnable runnable=new Runnable(){
public void run(){}};
Thread thread=new Thread(runnable);
thread.start(); //启动线程
相关文章推荐
- 多线程编程基础(线程创建)
- Java多线程基础学习之线程的创建方式总结
- Java多线程基础,线程的创建使用以及终止
- JAVA基础学习(十一)--多线程一线程的创建,运行,同步和锁
- C# 多线程编程基础——怎么创建和执行多个线程
- 基础学习day11--多线程一线程的创建,运行,同步和锁
- linux基础编程:多线程基础总结:线程创建 终止 线程同步/互斥量/条件变量/信号灯
- 多线程基础(一)---创建线程
- Java基础:多线程(1)--线程的概述、创建线程的方式、线程的多种状态、线程常用的方法
- Java基础-多线程-①线程的创建和启动
- 多线程编程基础(线程创建)
- java 多线程基础(一)——线程创建及五种状态
- 多线程基础:两种常见的创建线程的方式
- 多线程基础知识第一篇:创建线程的方式及线程常用的方法
- Java基础-多线程-①线程的创建和启动
- 多线程基础:两种常见的创建线程的方式
- Java基础:多线程之线程创建的两种方式
- Java基础-多线程-①线程的创建和启动
- Java基础-多线程-①线程的创建和启动
- Java基础多线程之线程创建