zoukankan      html  css  js  c++  java
  • JAVA线程----基础

    线程简介:

      现在个人计算机操作系统多采用多任务和分时设计。一般可以在 同一时间内执行多个程序的操作系统都有进程的概念。一个进程就是一个执行中的程序,而每一个进程都哟自己独立的一块内存空间、一组系统资源。在进程概念中,每一个进程的内部数据和状态都是完全独立的。Java程序通过流控制来执行程序流,程序中单个顺序流控制称为线程;多线程则是指单个程序中可以同时运行多个不同的线程,执行不同的任务。多线程意味着一个程序的多行语句几乎可以在同一时间内运行的。

      线程与进程相似,是一段完成某个特定功能的代码,是程序中当个顺序的流控制。但与进程不同的是,同类的多个线程是共享一块内存空间和一组系统资源的,线程本身的数据通常只有微处理器的寄存器数据,以及一个供程序执行时使用的堆栈。所以系统在产生一个线程,或者在各个线程之间切换时,负担要比进程小得多,正因为如此,线程被称为轻负荷进程。一个进程中可以包含多个线程。

      一个线程是一个程序内部的顺序控制流。

    (1)、进程:每个进程都有自己的代码和数据空间(进程上下文),进程切换的开销大。

    (2)、线程:轻量级进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器,线程切换开销小。

    (3)、多进程:在操作系统中,能同时运行多个任务程序;

    (4)、多线程:在同一应用程序中,有多个顺序流同时执行;

    线程的状态:

      Java使用Thread类及其子类的对象表示线程,线程在它的一个完整的生命周期中通常要经历如下的四种状态:

    1.创建状态

      当一个Thread类或其子类的对象被声明并创建时,例如执行下列语句时,线程就处于创建状态:

      Thread myThread=new MyThreadClass();

    当一个线程处于创建状态的时候,它仅仅分配内存资源,并不能执行。

    2.可运行状态

      线程对象只有调用start()方法才能进入可运行状态;

      myThread.start();

      当处于可运行状态时,系统就为这个线程分配了它需要的系统资源,安排其运行并调用线程运行方法。

    3.不可运行状态

      不可运行状态也称阻塞状态,或者因为某种原因(输入/输出,等待消息,或者其他阻塞情况),系统不能执行线程状态。线程进入该状态的原因有如下几条。

      (1)、调用了sleep方法  (2)、调用了suspend方法  

      (3)、为等候一个条件变量,线程调用wait方法

      (4)、输入/输出流中发生了阻塞状态

    4.死亡状态

      就是线程释放了实体。处于死亡状态的线程不具有继续运行的能力。一般可以通过两种方法实现:

      (1)、自然撤销,正常运行的线程完成它的全部工作,也就是线程执行完毕

      (2)、线程被停止,调用stop方法。一般不推荐通过这种方法来终止线程的执行。

    我们以前写的程序都是从上往下按照一定顺序执行的,而引入线程之后,这个苛刻的规则被打破,程序会开辟多个分支运行,再加上处理器的高速处理数据的能力,我们肉眼看起来就像是同时运行一样。

    class Lefthand extends Thread{
            public void run(){
                for(int i=1;i<=4;i++){
                    System.out.println("我是左手线程");
                }
            }
        }    
    
    
    class Righthand extends Thread{
            public void run(){
                for(int i=1;i<=4;i++){
                    System.out.println("我是右手线程");
                }
            }
        }    
    
    public class ThreadTest{
        public static void main(String args[]){
            Lefthand left=new Lefthand();
            Righthand right=new Righthand();
            
            left.start();
            right.start();
    
            for(int i=1;i<=4;i++){
                    System.out.println("我是主线程");
            }
        }
    }
  • 相关阅读:
    Django ORM操作及进阶
    Django ORM字段和字段参数
    Django视图系统
    Django路由系统
    Django模板语言
    Django项目创建及相关配置,在pycharm终端打印SQL语句,在Python脚本中调用Django环境
    SQLALchemy之ORM操作
    SQLALchemy之介绍,基本使用
    SQLAlchemy创建表和删除表
    线程的通信与协作:sleep、wait、notify、yield、join关系与区别
  • 原文地址:https://www.cnblogs.com/scf141592/p/5764016.html
Copyright © 2011-2022 走看看