Java多线程(一)

来源:互联网 发布:什么是淘宝店铺推广 编辑:程序博客网 时间:2024/05/19 06:51

多线程是重点,听身边有过面试经历的同学说起过,就算我们不是为了面试,我们也得学好它吗,记得有句古话:书到用时方恨少。这句话送给每一位努力学习的人,加油。


在Java的JDK开发包中,实现Java多线程有两种方式:

(1)使用继承Thread类;

(2)实现Runnable接口。

注意:public class Thread implements Runnable 说明Thread类已经实现了Runnable接口,他们之间具有多态的关系。


为什么提供了这两种实现多线程的方法,一个不够用吗?

大家知道,面向对象中,具有三大特性:封装、继承、多态。并且在Java中,继承是单根继承机制,也就是说,一个子类只能有一个直接的父类。如果我们在实现一个类的时候,使它继承了一个类,那么我们就无法再根据它继承Thread类了,所以第一种方式创建多线程最大的局限就是不支持多继承。所以,第二种方式,就完全可以解决第一种问题带来的弊端。


下面是一个简单的创建多线程的例子:

public class Mythread extends Thread{    @Override     public void run(){        super.run();        System.out.println("MyThread!");    }}//运行类public class Run{    public static void main(String[] args){        Mythread mythread = new Mythread();        mythread.start();//具有两个作用:1.启动一个线程 2.调用run方法        //从调用start之后,才开始创建一个新的线程,main线程顺序执行,        //新创建的线程执行run方法中的代码。        System.out.println("运行结束!");    }}

代码的运行结果和代码的执行顺序或调用顺序是无关嘚。如果多次调用start方法,则会出现IllegalThreadStateException异常。
这里需要说明一下调用start方法的原理:当调用此方法时,会通知线程规划器,此线程已经准备就绪,等待调用线程对象的run方法,这个过程其实就是让系统安培一个时间来调用Thread对象的run方法,使线程得到运行,启动线程达到异步执行的效果。

实现Runnable接口来创建多线程
步骤:实现Runnable接口,目的是实现Runnable接口中的run方法
         创建一个Thread对象,并将实现的Runnable接口的对象,传递给Thread构造器。
         调用Thread对象的start方法。
代码演示如下:
public class MyRunnable implements Runnable{    @Override    public void run(){        System.out.println("当前线程的名字为:"+Thread.currentThread().getName());        System.out.println("运行中!");    }}//运行类代码public class Run{    public static void main(String[] args){        Runnable runnable  = new MyRunnable();        Thread thread = new Thread(runnable);        thread.setName("Runnable-Thread");        thread.start();        System.out.println("main线程运行结束");    }}

前面我们说过,Thread类本身也实现了Runnable接口,也就意味着:构造函数Thread(Runnable target)不光可以传入Runnable接口的对象,还可以传入一个Thread类的对象,这样完全可以将一个Thread对象中的run方法交给其它线程进行调用。

          


0 0
原创粉丝点击