多线程:初识线程,以及创建线程的两种方式
2017-06-21 09:20
302 查看
多线程:
一、进程和线程的定义以及多线程的好处和弊端。
进程:正在执行中的程序(直译)线程:就是进程中用来控制程序执行的控制单元(执行路径)
一个进程可以多个执行路径,称之为多线程。
一个进程至少要有一个线程。
开启多个线程是为了同时运行多部分代码。
每一个线程都有自己要执行的内容,这部分内容可以称为线程要执行的任务。
多线程的好处:解决了多部分同时运行的问题。
多线程的弊端:线程太多会导致效率的降低。
其实应用程序的执行都是CPU在做着快速的切换完成的,这个切换是随机的。
二、如何创建线程?
方式一:继承Thread类
步骤:
1.定义一个类继承Thread类。2.覆盖Thread类中的run方法。
3.创建线程对象,直接创建Thread类的子类对象。
4.调用start方法,开启线程,并调用线程的任务run方法执行。
例如:
class Demo extends Thread//继承使用extends关键字 { private String name; Demo(String name) { super(name);//继承中用super表示父类。 } public void run()//覆盖Thread类中的run方法。 { show(); } public void show()//定义线程的任务。 { for(int i = 0;i<10;i++) { for(int j = -999999999;j<999999999;j++){} System.out.println(name+"..."+i+"name = "+Thread.currentThread().getName()); } } } public class MultithreadDemo { public static void main(String[] args) { Demo d1 = new Demo("旺财"); Demo d2 = new Demo("小强"); //以上两步创建了两个线程对象(线程的子类对象) d1.start(); d2.start(); //调用线程的start方法。(开启线程) System.out.println("over name = "+Thread.currentThread().getName()); //Thread.currentThread().getName()可以得到当前运行线程的名称。 } }
调用run和调用start有什么区别
Thread类中run()和start()方法的区别如下:run()方法:在本线程内调用该Runnable对象的run()方法,可以重复多次调用;
start()方法:启动一个线程,调用该Runnable对象的run()方法,不能多次启动一个线程;
方式二:实现Runnable接口。
1.定义类实现Runnable接口2.覆盖接口中的run方法,将线程的任务代码封装到run方法中
3.通过Thread类创建线程对象,并将Runnable类的子类对象作为构造函数的参数进行传递。
为什么?
因为线程的任务都封装在Runnable接口子类对象的方法中。
所以要在线程对象创建时就明确要运行的任务。
- 4.调用线程对象的start方法开启线程。
例如:
public class ThreadDemo1 { public static void main(String[] args) { Demo2 d= new Demo2("小强"); Demo2 d1 = new Demo2("wangcai"); //创建两个线程的任务对象 Thread t1 = new Thread(d,d.name); Thread t2 = new Thread(d1,d1.name); //将线程要实现的任务对象作为线程构造函数的参数传给线程。 t1.start(); t2.start(); } } class Demo2 implements Runnable { String name; Demo2(String name) { this.name = name; } public void run() { show(); } public void show() { for (int i = 0; i < 10; i++) { for (int j = 0; j < 9999999; j++) { } System.out.println(name+".....i = "+i+"....."+Thread.currentThread().getName()); } } }
实现Runnable接口的好处!
1.将线程的任务从线程的子类中分离出来,进行了单独的封装,按照面向对象的思想将任务封装成对象。2.避免了java单继承的局限性。
所以,创建线程的第二种方式较为常用。
相关文章推荐
- 线程Thread的两种创建方式以及区别
- Java【多线程知识总结(5)】比较继承Thread类创建线程和实现Runnable接口创建线程这两种方式
- 多线程基础:两种常见的创建线程的方式
- 多线程--创建线程两种方式实例
- 多线程_Thread类简介及创建线程的两种方式
- java多线程总结一:线程的两种创建方式及优劣比较
- 多线程-01,创建线程的两种方式
- 多线程——用创建线程的两种方式分别解决经典窗口卖票问题
- Java基础:多线程之线程创建的两种方式
- java多线程之创建线程的两种传统方式
- Java 中的多线程-两种创建方式,定时器的应用,线程的安全问题可以用银行转账来说明
- 【多线程】两种方式创建线程
- java多线程总结一:线程的两种创建方式及优劣比较
- 黑马程序员--创建线程的两种方式、步骤以及代码体现
- 04.多线程--06.【同步方式在线程两种创建方式中的可行性】【同步代码块和同步函数的关系】【多线程程序设计思路总结】
- Java【多线程知识总结(5)】比较继承Thread类创建线程和实现Runnable接口创建线程这两种方式
- java多线程总结一: 线程的两种创建方式及优劣比较
- java多线程总结一: 线程的两种创建方式及优劣比较
- java多线程总结一:线程的两种创建方式及优劣比较
- 多线程基础:两种常见的创建线程的方式