多线程第一篇

一、什么是线程?什么是进程?

  进程:我们的电脑上的每个软件都可看作一个进程,以一个浏览器为例。

  线程:线程可以看作是浏览器上打开的一个网页,一个网页就是一个线程。多线程的存在让我们可以在同一时间进行多个动作,比如边听歌边聊天。

 我们执行java程序,开启jvm,就是开了一个进程。

二、多个线程是同时运行的吗?

  这个要看你的电脑处理器是几核的,如果一核处理器,那么多个线程就会被安排快速的交替执行。多核处理器,会让几个线程同时进行。

三、创建多线程

  创建多线程有两种方式,一般都这样说。但是创建多线程只能通过Thread类,那为什么还要说有两种,等下说,我们先看怎么创建线程。

  首先说明线程的执行步骤:thread对象调用start()方法,strat()方法自动 调用run()方法,run()方法中写的线程的业务逻辑,从而实现线程的执行单元

  (1)实现Runnable接口,重写run()方法  

//Runnable的源码
public interface Runnable{
  public void run();      
}


//实现Runnable接口
public class RunnableImpl implement Runnable{
     private int i;
     public Runnable(int i){
        this.i=i;  
     }  
     public void run(){
         System.out.println(i);
     }
}    

public class ceshi{
  public static void main(String[] arg){
    RunnableImpl runnableImpl=new RunnableImpl(2);
    Thread thread=new Thread(runableImpl,"threadName");
    //开启线程
    thread.start();
  }
}

  (2)继承Thread类,重写run()方法(Thread类在源码中也是实现了Runnable接口)

//继承thread类
public class ThreadE extends Thread{
  //这个成员变量不是设置线程名字的,只是用来打印用的   
  private String threadname;
   
  public ThreadE(String threadname){
         this.threadname=threadname; 
  }    
   
  public void run(){
    System.out.println(threadname);  
  }    
}


public class ceshi2{
   public static void main(String[] arg){
        ThreadE threadE=new ThreadE("这是继承Thread类实现的");
        Thread thread=new Thread(threadE);
      //开启线程 thread.start(); } }

 上文提到的,我们对创建线程的方式到底是一种还是两种存在疑问。现在进行说明:

  在JDK中代表线程的只有Thread类,所以创建线程之能通过Thread类。上面的两种方法可以说是对线程的实现。我们观察到,上面两种方法中,最终实现线程都要通过"new  Thread()"。

说明new Thread()中的参数 :

  Thread类中有几个构造方法,我们最常见的是这个 :

      Thread(Runnable target,String ThreadName);

      第一个参数是实现Runnable接口的类的实例,第二个参数是为线程设置名字。也可以不设置名字,那就是用Thread(Runnable target);

    在Thread类中run()方法中,有如下源码:  

@Override
public void run(){
    //如果有Runnable的实现类的对象,就用对象的run()方法  
     if(target!=null){
        target.run();
     }
}

  如果直接new Thread()来创建线程,就会调用run()方法,如果实现了Runnable类或者继承了Thread类,就会调用目标类中重写后的run()方法。

原文地址:https://www.cnblogs.com/fbbg/p/13991676.html