Java 多线程基础

来源:互联网 发布:网页版淘宝网 电脑版 编辑:程序博客网 时间:2024/06/07 23:29

 在Java开发中,我们经常会用到多线程来解决一些异步的问题,多线程属于Java的重点与难点,下面我们就一步一步的讲解Java中的多线程

 下面先讲一下进程与线程的区别:


  一、进程与线程:

  一般来说,一个应用程序对应一个进程,而在一个进程中,会有一个或者多个线程,线程相当于子任务。这样可以最大限度地利用多核cpu。
  需要注意以下几点:
1、在Java中,使用 public static void main(String[] args) { } 进行启动,jvm会创建一个name为main的线程来执行代码。
2、注意,多线程的情况下线程的执行是无序的。
3、jvm创建的name为main的只是一个普通的线程,一个java程序对应一个进程,进程结束在于里面的线程是否都结束,所以即使jvm创建的name为main线程结束了,如果还有其它的线程,那么此java程序也不会停止。所以当程序出现 Process finished with exit code 0 这个结束语时,那么一定是java进程中所有的线程都运行完毕。

  

  二、如何实现多线程 :

  实现多线程的方式一种是继承Thread类,一种是自己实现Runnable接口,一般来说推荐自己实现Runnable接口,这样可以做到多个线程执行同一个Runnable代码块。


  三、Thread类中的方法:

  1、setName()方法:
  设置线程的名称,注意多个线程的名称是可以重复的:
  MyRunnable myRunnable = new MyRunnable();
  Thread thread = new Thread(myRunnable);
  thread.setName("myThread");
  thread.start();

   2、start()方法:
  此方法即是通知系统的‘线程规划器’来执行对应的代码块,注意只有在代码中调用start()方法,系统才会生成新的线程来执行对应的代码块,否则直接调用run()方法的话,不会生成新的线程,还会在当前的线程。

  3、currentThread()方法:
  currentThread()方法可以得到当前的线程:
  Thread.currentThread()

  4、isAlive()方法:
  判断此线程是否在执行过程中,如果在执行过程中,返回true,如果没有,返回false.
  可以看以下代码 ,其中新创建一个线程,start()之前,isAlive()为false,在线程执行过程中,isAlive()为true。当线程执行完成之后,isAlive()为false。

public class Test2 {    public static void main(String[] args) {        MyRunnable myRunnable = new MyRunnable();        Thread thread = new Thread(myRunnable);        System.out.println("isAlive():" + thread.isAlive());        thread.start();        try {            Thread.sleep(1000);        } catch (InterruptedException e) {            e.printStackTrace();        }        System.out.println("isAlive():" + thread.isAlive());        try {            Thread.sleep(3000);        } catch (InterruptedException e) {            e.printStackTrace();        }        System.out.println("isAlive():" + thread.isAlive());    }}public class MyRunnable implements Runnable{    @Override    public void run() {        try {            Thread.sleep(2000);        } catch (InterruptedException e) {            e.printStackTrace();        }    }}


 
 5、sleep()方法:
 传入一个值n,单位为ms值,线程会停止n ms。

 6、getId()方法:
 返回此线程的唯一Id,每个线程的Id都是系统生成的,是线程安全自增的,所以线程之后Id肯定是不同的。


  四、线程的停止:

  java中有三种方式退出正在运行的线程:
   1.1、使用退出标志,使线程正常退出,也就是run方法完成后线程停止。
   1.2、使用stop方法强行停止线程,但是不推荐使用此方法,因为和stop suspend resume一样,都是过期作废的方法。使用这些方法可能导致不可预料的结果
   1.3、使用interrupt()方法中断线程  

  下一节我们会详细的讲述Thread在interrupt()中如何退出线程


原创粉丝点击