(一) Java多线程详解之多线程概念和创建线程的两种方式
来源:互联网 发布:网络机顶盒收费吗 编辑:程序博客网 时间:2024/05/03 16:28
1.多线程的说明
在过去单CPU时代,单任务在一个时间点只能执行单一程序。之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程。虽然并不是真正意义上的”同一时间点”,而是多个任务或进程共享一个CPU,并交由操作系统来完成多任务间对CPU的运行切换,以使得每个任务都有机会获得一定的时间片运行。随着多任务对软件开发者带来的新挑战,程序不在能假设独占所有的CPU时间,所有的内存和其他计算机资源。一个好的程序榜样是在其不再使用这些资源时对其进行释放,以使得其他程序能有机会使用这些资源。再后来发展到多线程技术,使得在一个程序内部能拥有多个线程并行执行。一个线程的执行可以被认为是一个CPU在执行该程序。当一个程序运行在多线程下,就好像有多个CPU 在同时执行该程序。然而,在现代的计算机伴随着多核CPU的出现,也就意味着不同的线程能被不同的CPU核得到真正意义的并行执行。
2.多线程带来的优点
1.程序响应更快2.资源利用率更好3.程序设计在某些情况下更简单
3.创建线程的2种方式
3.1 继承Thread重写run方法创建线程
public class MyThread extends Thread { @Override public void run() { System.out.println(Thread.currentThread().getName() + ":继承Thread类方式创建线程"); }}
3.2 实现Runnable接口重写run方法创建线程
public class MyRunnable implements Runnable { @Override public void run() { System.out.println(Thread.currentThread().getName() + ":实现Runnable接口方式创建线程"); }}
3.3 测试类运行查看两种创建线程方式输出结果
public class CreateThreadTest { public static void main(String[] args) { MyThread myThread = new MyThread(); myThread.start(); MyRunnable myRunnable = new MyRunnable(); Thread runnableThread = new Thread(myRunnable); runnableThread.start(); }}输出结果:Thread-0:继承Thread类方式创建线程Thread-1:实现Runnable接口方式创建线程
4.项目中使用哪种创建线程方式更好?
查阅了一些资料后,发现大佬们对着两种创建线程方式哪种好并没有给出明确的答案。不过大佬们更倾向于实现Runnable接口方式,主要原因是:其一实现Runnable接口是更加符合面向对象思想,线程分为两部分,一是线程对象,二是线程任务,其二线程池可以有效的管理实现了Runnable接口的线程,如果线程池满了,新的线程就会排队等候执行,直到线程池空闲出来为止,而如果线程是通过实现Thread子类实现的,这将会复杂一些,其三Java语言为单继承多实现。
5.线程创建和执行顺序
public class ThreadExample { public static void main(String[] args) { for (int i = 0; i < 5; i++) { new Thread("线程名" + i) { public void run() { System.out.println("Thread: " + getName() + "running"); } }.start(); } }}测试结果:Thread: 线程名0runningThread: 线程名2runningThread: 线程名1runningThread: 线程名3runningThread: 线程名4running
尽管启动线程的顺序是有序的,但是执行的顺序并非是有序的,线程执行顺序是由JVM和操作系统一起决定的。
6.线程提高篇
public class ThreadExample2 { public static void main(String[] args) { new Thread(new Runnable() { public void run() { try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("runnable :" + Thread.currentThread().getName()); } }) { public void run() { try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("thread :" + Thread.currentThread().getName()); } }.start(); }}输出结果:thread :Thread-0
以上代码是在是创建线程时,在构造中传入了Runnable实例,并且在内部重写了run方法,但是最后实际运行的是内部重写的run方法。
- (一) Java多线程详解之多线程概念和创建线程的两种方式
- Java多线程之多线程概述和俩种创建方式
- Java中的多线程(一)之多线程创建
- Java多线程总结(一):Java两种创建线程方式的比较
- 多线程 创建线程的两种方式
- Java基础:多线程之线程创建的两种方式
- java多线程之创建线程的两种传统方式
- java多线程01:创建线程的两种传统方式
- Java多线程:创建线程的两种实现方式
- 【JAVA多线程】-线程的两种创建方式及比较
- Java线程总结(一):创建线程的两种方式Thread和Runnable
- Java学习之多线程--创建线程的三种方式
- java多线程总结一:线程的两种创建方式及优劣比较
- java多线程总结一:线程的两种创建方式及优劣比较
- java多线程总结一: 线程的两种创建方式及优劣比较
- java多线程总结一: 线程的两种创建方式及优劣比较
- java多线程总结一:线程的两种创建方式及优劣比较
- java多线程总结一:线程的两种创建方式及优劣比较
- 数据挖掘
- 动态sql语句基本语法--Exec与Exec sp_executesql 的区别
- mysql 运算符
- Mongo查询语句
- Nginx配置文件详解
- (一) Java多线程详解之多线程概念和创建线程的两种方式
- spring mvc 的jpa JpaRepository数据层 访问方式汇总
- Quartz定时器在线调试工具
- 闭包是神魔及缺陷
- [LeetCode]Reverse Integer
- Fragment中使用toolbar
- heatmap example
- mybatis中jdbctype的作用
- SSD的Matching Strategy