Java多线程(1)——多线程创建(传智播客毕老师视频讲解)
2014-09-11 08:30
351 查看
1、进程与线程
进程:是一个正在执行的程序。每一个进程执行都有一个执行顺序,该顺序是一个执行路径,或者叫一个控制单元。
线程:就是进程中一个独立的控制单元。线程在控制着进程的执行。
特性:随机性。谁抢到谁执行,至于执行多长,cpu说了算。
一个进程中至少有一个线程。
2、创建线程方式
2.1、继承Thread类创建线程:
步骤:2.1.1、定义类继承Thread;
2.1.2、复写Thread类中的run方法;
2.1.3、调用线程的start方法,该方法两个作用:启动线程,调用run方法。
运行结果如下:
2.2、实现Runable接口
步骤:2.2.1、定义类实现Runnable接口;
2.2.2、覆盖Runnable接口中的run方法;
2.2.3、通过Thread类建立线程对象;
2.2.4、将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数;
因为,自定义的run方法所属的对象是Runnable接口的子类对象,所以要让线程去执行指定对象run方法,就必须明确run方法所属对象。
2.2.5、调用Thread类的start方法开启线程并调用Runnable接口子类的run方法。
从结果中可以看出,线程0和线程1交替运行,但是10后直接为8,最后又为9,其实这是错误的,下一篇博文介绍多线程的安全机制。
2.3、实现方式与继承方式区别
实现方式好处:避免了单继承的局限性。在定义线程时,建议使用实现方式。
继承Thread:线程代码存放在Thread子类的run方法中;
实现Runnable:线程代码存放在接口的子类run方法中。
3、获取线程对象及名称
线程都有自己默认的名称:Thread-编号,编号从0开始。
Thread类中的方法:
static Thread currentThread():获取当前线程对象(静态方法,返回值为Thread类型的类,因此其调用格式为Thread.currentThread())。
getName():获取线程名称。
setName:设置线程名称。
进程:是一个正在执行的程序。每一个进程执行都有一个执行顺序,该顺序是一个执行路径,或者叫一个控制单元。
线程:就是进程中一个独立的控制单元。线程在控制着进程的执行。
特性:随机性。谁抢到谁执行,至于执行多长,cpu说了算。
一个进程中至少有一个线程。
2、创建线程方式
2.1、继承Thread类创建线程:
步骤:2.1.1、定义类继承Thread;
2.1.2、复写Thread类中的run方法;
2.1.3、调用线程的start方法,该方法两个作用:启动线程,调用run方法。
public class CreateXian extends Thread { static int i; public void run() { for(i=0;i<10;i++) { System.out.println("......CreateXian....."); } } } public class Xian1 { static int i; public static void main(String[] args) { CreateXian x=new CreateXian(); x.start(); for(i=0;i<10;i++) { System.out.println("...main......"); } } }
运行结果如下:
2.2、实现Runable接口
步骤:2.2.1、定义类实现Runnable接口;
2.2.2、覆盖Runnable接口中的run方法;
2.2.3、通过Thread类建立线程对象;
2.2.4、将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数;
因为,自定义的run方法所属的对象是Runnable接口的子类对象,所以要让线程去执行指定对象run方法,就必须明确run方法所属对象。
2.2.5、调用Thread类的start方法开启线程并调用Runnable接口子类的run方法。
public class RunanbleDemo implements Runnable { int i=100; public void run() { while(true) { if(i>0) { //try{Thread.sleep(10);}catch(Exception e){} System.out.println("...."+Thread.currentThread().getName()+"...."+i--); } } } } public class Xian1 { static int i; public static void main(String[] args) { RunanbleDemo t=new RunanbleDemo(); Thread t1=new Thread(t); Thread t2=new Thread(t); t1.start(); t2.start(); for(i=0;i<5;i++) { System.out.println("...main......"+Thread.currentThread().getName()); } } }运行结果如下:
从结果中可以看出,线程0和线程1交替运行,但是10后直接为8,最后又为9,其实这是错误的,下一篇博文介绍多线程的安全机制。
2.3、实现方式与继承方式区别
实现方式好处:避免了单继承的局限性。在定义线程时,建议使用实现方式。
继承Thread:线程代码存放在Thread子类的run方法中;
实现Runnable:线程代码存放在接口的子类run方法中。
3、获取线程对象及名称
线程都有自己默认的名称:Thread-编号,编号从0开始。
Thread类中的方法:
static Thread currentThread():获取当前线程对象(静态方法,返回值为Thread类型的类,因此其调用格式为Thread.currentThread())。
getName():获取线程名称。
setName:设置线程名称。
相关文章推荐
- Java多线程(3)——多线程通信(传智播客毕老师视频讲解)
- Java多线程(4)——多线程JDK5.0升级版(传智播客毕老师视频讲解)
- Java多线程(2)——多线程安全(传智播客毕老师视频讲解)
- Java中String类(传智播客毕老师视频讲解)
- Java中Collection子接口(1)——List接口(传智播客毕老师视频讲解)
- Java中集合框架工具类——Arrays(传智播客毕老师视频讲解)
- Java中IO流(2)——字符流(传智播客毕老师视频讲解)
- Java中System类(传智播客毕老师视频讲解)
- Java中增强for循环(传智播客毕老师视频讲解)
- Java中泛型(5)——泛型限定(传智播客毕老师视频讲解)
- Java中IO流(1)——IO流概述(传智播客毕老师视频讲解)
- Java多线程(5)——多线程停止(传智播客毕老师视频讲解)
- Java中Collection子接口(2)——Set接口(传智播客毕老师视频讲解)
- Java中基本数据类型对象包装类(传智播客毕老师视频讲解)
- Java中可变参数方法(传智播客毕老师视频讲解)
- Java对象初始化过程(传智播客毕老师视频讲解)
- Java中IO流(5)——字节流缓冲区(传智播客毕老师视频讲解)
- Java中泛型(1)——泛型介绍(传智播客毕老师视频讲解)
- Java中Runtime类(传智播客毕老师视频讲解)
- Java中静态导入(传智播客毕老师视频讲解)