多线程

Posted 9527yzx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程相关的知识,希望对你有一定的参考价值。

一、进程与线程基本概念

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

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

二、线程的生命周期

  图片来自: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

 

  

 

以上是关于多线程的主要内容,如果未能解决你的问题,请参考以下文章

线程学习知识点总结

多个请求是多线程吗

python小白学习记录 多线程爬取ts片段

多线程编程

多线程编程

python多线程