创建线程的两种方式:继承Thread类和实现Runnable接口
2015-05-14 21:01
736 查看
第一种方式:继承Thread类
步骤:1、定义类继承Thread
2、覆写Threa类的run方法。 自定义代码放在run方法中,让线程运行
3、调用线程的star方法,
该线程有两个作用:启动线程,调用run方法。
代码示例:
第二种方式:实现Runnable接口
步骤:1、定义类实现Runnable接口
2、覆盖Runnable接口中的run方法,运行的代码放入run方法中。
3、通过Thread类建立线程对象。
4、将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。
因为,自定义的run方法所属的对象是Runnable接口的子类对象。所以要让线程去指定指定对象的run方法。就必须明确该run方法所属对象
5、调用Thread类的start方法开启线程并调用Runnable接口子类的run方法
代码示例:卖票程序,多个窗口同时卖票
两种方式的区别:
第二种方式好处:避免了单继承的局限性。比如当一个student类继承了person类,再需继承其他的类时就不能了,所以在定义线程时,建议使用第二种方式。
解决多线程安全性问题:1、同步代码块
2、同步函数:锁为this
3、静态同步函数: 锁为Class对象:类名.class
步骤:1、定义类继承Thread
2、覆写Threa类的run方法。 自定义代码放在run方法中,让线程运行
3、调用线程的star方法,
该线程有两个作用:启动线程,调用run方法。
代码示例:
class Test extends Thread { //private String name; Test(String name) { //this.name = name; super(name); } public void run() { for(int x=0; x<60; x++) { System.out.println((Thread.currentThread()==this)+"..."+this.getName()+" run..."+x); //Thread.currentThread():获取当前线程对象 } } } class ThreadTest { public static void main(String[] args) { Test t1 = new Test("one---"); Test t2 = new Test("two+++"); t1.start(); t2.start(); // t1.run(); // t2.run(); for(int x=0; x<60; x++) { System.out.println("main....."+x); } } }
第二种方式:实现Runnable接口
步骤:1、定义类实现Runnable接口
2、覆盖Runnable接口中的run方法,运行的代码放入run方法中。
3、通过Thread类建立线程对象。
4、将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。
因为,自定义的run方法所属的对象是Runnable接口的子类对象。所以要让线程去指定指定对象的run方法。就必须明确该run方法所属对象
5、调用Thread类的start方法开启线程并调用Runnable接口子类的run方法
代码示例:卖票程序,多个窗口同时卖票
class Ticket implements Runnable { private int tick = 100; public void run() { while(true) { if(tick>0) { System.out.println(Thread.currentThread().getName()+"....sale : "+ tick--); } } } } class TicketDemo { public static void main(String[] args) { Ticket t = new Ticket(); Thread t1 = new Thread(t);//创建了一个线程; Thread t2 = new Thread(t);//创建了一个线程; Thread t3 = new Thread(t);//创建了一个线程; Thread t4 = new Thread(t);//创建了一个线程; t1.start(); t2.start(); t3.start(); t4.start(); } }
两种方式的区别:
第二种方式好处:避免了单继承的局限性。比如当一个student类继承了person类,再需继承其他的类时就不能了,所以在定义线程时,建议使用第二种方式。
解决多线程安全性问题:1、同步代码块
2、同步函数:锁为this
3、静态同步函数: 锁为Class对象:类名.class
相关文章推荐
- Java【多线程知识总结(5)】比较继承Thread类创建线程和实现Runnable接口创建线程这两种方式
- Java【多线程知识总结(5)】比较继承Thread类创建线程和实现Runnable接口创建线程这两种方式
- 线程:创建线程有两种方式,一种是继承Thread类,另一种是实现Runnable接口。代码如下:
- 线程 创建和启动线程的两种方式 实现Runnable接口 继承Thread类 重写唯一方法run()
- JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没
- 创建子线程的两种方式:类实现runnable接口或是类继承Thread类
- 在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口
- 创建线程的方式(继承和实现接口两种)
- Java中继承Thread和实现Runnable这两种创建线程有何区别
- 通过继承Thread类和通过实现Runnable接口 创建线程的区别
- Thread类和Runnable接口这两种线程创建方式的比较
- java基础知识回顾之java Thread类--java线程实现常见的两种方式实现Runnable接口(二)
- java多线程学习1-继承Thread类和实现Runnable接口来创建线程
- 在java编程时,线程创建实现Runnable接口与继承Thread类的不同
- 【转载】JAVA中线程的两种实现方法-实现Runnable接口和继承Thread类
- Java中继承Thread和实现Runnable这两种创建线程有何区别
- 线程实现方式-继承Thread类和实现Runnable接口的区别
- java创建多线程的两种方法(继承Thread类/实现Runnable接口)
- java实现多线程的两种方式继承Thread类和实现Runnable接口的方法
- 细说继承Thread类和实现Runnable接口来创建线程的区别