zoukankan      html  css  js  c++  java
  • Java多线程原理

     学过Java的人都知道,Java是少数的集中支持多线程的语言之一,大多数的语言智能运行单独的一个程序块,无法同时运行不同的多个程序块,Java的多线程机制弥补了这个缺憾,他可以让不同的程序块一起运行,这样可以让程序运行更加顺畅,同时也达到了多任务处理的目的: 
    一、线程和进程的概念

        

            现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。

      进程是程序的一个动态执行过程,是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe就是一个进程。线程是指进程中的一个执行流程,一个进程中可以运行多个线程。比如java.exe进程中可以运行很多线程。线程总是属于某个进程,进程中的多个线程共享进程的内存。“同时”执行是人的感觉,在线程之间实际上轮换执行。

     

    二、Java中线程的实现

          在Java中药想实现多线程有两种手段,一种是集成Thread类,另一种就是实现Runnable接口。下面看继承自Thread类线程的创建原理:

        

           首先定义一个线程类   该类必须继承自Thread类,同时必须明确的覆写run()方法

         如: class  MyThread  extends Thread{

                    public void  run(){   //覆写Thread类中的run方法此方法是线程中

             线程主体;                                                                         的主体

                                   }

     

      然后定义一个主类,实例化线程类的对象,发动启动线程的命令

         如: public class  ThreadText{

                      public stataic void  main(String args[]){

                            MyThread m1=new MyThread();//实例化对象

                               m1.start();//启动多线程

     

           }                       };  

     

        实现Runnable接口:

               首先定义一个线程类继承自Runnable接口

         

            如: class  MyThread implements Runnable{

                    public void  run(){   //覆写Runnable接口中的run方法

            线程主体;           

                       }

     

      然后定义一个主类,实例化线程类的对象,发动启动线程的命令

         如: public class  ThreadText{

                      public stataic void  main(String args[]){

                           

                MyThread m1=new MyThread();//实例化Runnable子类对象

                Thread  t1=new   Thread(m1);//实例化Thread类对象

                                    t1.start();//启动多线程

           }                       };  

     

    三、线程的几种状态

          在Java当中,线程通常都有五种状态,创建、就绪、运行、阻塞和死亡。 
    第一是创建状态。在生成线程对象,并没有调用该对象的start方法,这是线程处于创建状态; 
    第二是就绪状态。当调用了线程对象的start方法之后,该线程就进入了就绪状态,但是此时线程调度程序还没有把该线程设置为当  前线程,此时处于就绪状态。在线程运行之后,从等待或者睡眠中回来之后,也会处于就绪状态 
    第三是运行状态。线程调度程序将处于就绪状态的线程设置为当前线程,此时线程就进入了运行状态,开始运行run函数当中的代码  
    第四是阻塞状态。线程正在运行的时候,被暂停,通常是为了等待某个时间的发生(比如说某项资源就绪)之后再继续运行。  sleep,suspend,wait等方法都可以导致线程阻塞。 
    第五是死亡状态。如果一个线程的run方法执行结束或者调用stop方法后,该线程就会死亡。对于已经死亡的线程,无法再使用start方法令其进入就绪  状态 

    天生我才必有用,千金散去还复来!
  • 相关阅读:
    ExtJS小技巧
    Oracle 表的行数、表占用空间大小,列的非空行数、列占用空间大小 查询
    NPM 私服
    IDEA 不编译java以外的文件
    SQL 引号中的问号在PrepareStatement 中不被看作是占位符
    Chrome 浏览器自动填表呈现淡黄色解决
    批量删除Maven 仓库未下载成功.lastupdate 的文件
    Oracle 11g 监听很慢,由于监听日志文件太大引起的问题(Windows 下)
    Hibernate 自动更新表出错 建表或添加列,提示标识符无效
    Hibernate 自动更新表出错 More than one table found in namespace
  • 原文地址:https://www.cnblogs.com/Jack-Lu/p/3179245.html
Copyright © 2011-2022 走看看