多线程:初识线程,以及创建线程的两种方式
来源:互联网 发布:2016年韩国迷你网络剧 编辑:程序博客网 时间:2024/04/28 13:06
多线程:
一、进程和线程的定义以及多线程的好处和弊端。
- 进程:正在执行中的程序(直译)
- 线程:就是进程中用来控制程序执行的控制单元(执行路径)
- 一个进程可以多个执行路径,称之为多线程。
- 一个进程至少要有一个线程。
- 开启多个线程是为了同时运行多部分代码。
- 每一个线程都有自己要执行的内容,这部分内容可以称为线程要执行的任务。
- 多线程的好处:解决了多部分同时运行的问题。
- 多线程的弊端:线程太多会导致效率的降低。
- 其实应用程序的执行都是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单继承的局限性。
- 所以,创建线程的第二种方式较为常用。
阅读全文
0 0
- 多线程:初识线程,以及创建线程的两种方式
- 多线程 创建线程的两种方式
- 【多线程】两种方式创建线程
- 多线程--创建线程两种方式实例
- 多线程的安全问题。 创建线程的两种方式区别
- 多线程-01,创建线程的两种方式
- Java基础:多线程之线程创建的两种方式
- java多线程之创建线程的两种传统方式
- java多线程01:创建线程的两种传统方式
- Java多线程:创建线程的两种实现方式
- 【JAVA多线程】-线程的两种创建方式及比较
- 线程Thread的两种创建方式以及区别
- 创建线程的两种方式以及区别
- (一) Java多线程详解之多线程概念和创建线程的两种方式
- java线程学习心得二之线程的两种创建方式以及优异
- java学习11--线程创建的两种方式,生命周期以及守护线程
- 创建线程两种方式的比较
- java 创建线程 的两种方式
- git 使用beyond compare来diff与merge
- STM32的堆与栈
- Java堆栈全解
- 递归创建目录
- Java核心技术第一章
- 多线程:初识线程,以及创建线程的两种方式
- 创建自己的libigl项目
- Linux内核性能测试工具全景图
- stm32的Core_cm3.c文件
- A20拨号功能解决
- python pandas Excel 操作
- Redis 服务端配置——Could not connect to Redis at 127.0.0.1:6379: Connection refused
- 剑指offer--斐波那契数列-递归
- delphi 程序窗体及控件自适应分辨率