码迷,mamicode.com
首页 > 编程语言 > 详细

多线程

时间:2018-01-11 16:12:44      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:进入   转换   span   分享   lan   new   info   runable   进程与线程   

一、进程与线程基本概念

  进程:进程是程序的一次动态执行过程,它经历了从代码加载,执行到执行完毕的一整个过程;

  线程:线程可以看作是轻量级的进程,是进程中负责程序执行的执行单元,本身依靠程序而运行;

二、线程的生命周期

  图片来自:Java多线程

  技术分享图片

  线程共有五种基本状态:

  新建态(New):刚创建的线程对象处于新建态;

  就绪态(Runnable):线程对象调用Thread类中的start()方法,线程进入就绪态,做好执行准备,等待CPU的调度;

  运行态(Running):CPU调用处于就绪态的线程,线程开始执行,进入运行状态,处于其他状态的线程必须先转换为就绪态后才能进入到运行状态;

  阻塞态(Blocked):处于运行态的线程因为某些原因停止执行,进入阻塞态;

  死亡态(Dead):线程执行完毕或强行退出,生命周期结束;

三、线程的实现方式

  1、继承Thread类  

 1 class MyThread extends Thread{    
 2     private String name ;
 3     public MyThread(String name){
 4         this.name = name;
 5     }
 6     @Override
 7     public void run() {
 8         for(int i = 0 ; i<100 ; i++){
 9             System.out.println(this.name + "--------->"+i);
10         }
11     }    
12 }

  启动线程要使用Thread类中的start()方法而不是调用run()方法,run()方法用来定义线程的运行体,若直接调用run()方法,相当于在main()线程中执行run()方法,并没有创建新的线程,使用start()方法启动线程是通过JVM调用run()方法,会创建一个新的线程;

  注:一个线程只能调用一次start()方法(只能启动一次),若调用多次会出现异常:java.lang.IllegalThreadStateException

  2、实现Runnable接口

 1 package com.thread;
 2 
 3 class MyThread implements Runnable{    
 4     private String name ;
 5     public MyThread(String name){
 6         this.name = name;
 7     }
 8     @Override
 9     public void run() {
10         for(int i = 0 ; i<100 ; i++){
11             System.out.println(this.name + "--------->"+i);
12         }
13     }    
14 }
15 
16 public class ThreadDemo {
17     public static void main(String[] args) {
18         MyThread mt = new MyThread("这是一个线程A:");
19         new Thread(mt).start();
20 //        Thread t1 = new Thread(mt);
21 //        t1.start();
22         new Thread(mt).start();
23 //        Thread t2 = new Thread(mt);
24 //        t2.start();
25         
26     }
27 }

  Runable接口中只有run()方法,继承Runnable接口实现多线程必须通过Thread类来启动start()方法,也就是将实现了Runnable接口类的实例传入Thread创建新的线程,再调用start()方法;

  

四、线程命名与取得

  Thread类中提供了setName()、getName()方法为线程命名或取得线程名称;

    |-  线程命名:public final String getName();

    |-  取得命名:public final void setName(String name);

    |-  返回当前正在执行对象的引用:public static Thread currentThread();

技术分享图片
 1 package com.thread;
 2 
 3 class MyThread implements Runnable{    
 4     @Override
 5     public void run() {
 6         for(int i = 0 ; i<50 ; i++){
 7             System.out.println(Thread.currentThread().getName() + "--------->"+i);
 8         }
 9     }    
10 }
11 
12 public class ThreadDemo {
13     public static void main(String[] args) {
14         MyThread mt = new MyThread();
15         new Thread(mt,"线程A").start();
16         new Thread(mt,"线程B").start();
17         Thread t = new Thread(mt);
18         t.setName("线程C");
19         t.start();
20         
21     }
22 }
View Code

 

  

 

多线程

标签:进入   转换   span   分享   lan   new   info   runable   进程与线程   

原文地址:https://www.cnblogs.com/9527yzx/p/8267645.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!