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
- java多线程:多线程(一)
- Java--多线程(一)
- java(多线程 一)
- JAVA多线程(一)
- java多线程(一)
- Java多线程(一)
- Java多线程(一)
- java多线程(一)
- Java多线程(一)
- Java多线程(一)
- java---多线程(一)
- Java多线程(一)
- Java多线程(一)
- java多线程(一)
- java多线程(一)
- Java多线程(一)
- Java多线程(一)
- Java多线程(一)
- 王兴、张一鸣公开评论BAT和互联网下半场
- 阿里云免费SSL配置-ubuntu系统apache2
- OSI七层模型
- UE4学习10 UMG滑动条的细节
- PPT--Power Point
- Java多线程(一)
- 小晚wan的公众号
- Bug总结之Mybatis(2017.3 ~ .4)
- ASP.NET 基础 视频课程
- laravel 5.3用户认证--默认的用户表数据迁移
- 使用枚举实现简单的数据处理
- “类视图”和“对象浏览器”图标的含义
- 第八章 8-4 数字时钟
- AOP的实现方式