温故而知新之Java多线程编程(一)
来源:互联网 发布:手机必备实用软件 编辑:程序博客网 时间:2024/06/02 06:58
最近在复习多线程,为了更深入的理解,也就是可以讲给别人听,故写此文。
本文主要来自于对于《Java多线程编程》一书的复习,还有少量的《Java并发编程》《Java多线程编程实战指南(设计模式篇)》。有兴趣的读者可以去看看。
首先来看几个概念:并行、并发、进程、线程。
进程:百度百科里的定义我就不说了,你可以理解为一个执行的程序,也就是你打开任务管理器看到的那一堆.exe文件。
并行:就是在多个处理器或者多核的环境下同时执行多个进程。
并发:一般在单核处理器上,让用户以为有多个进程在同时执行这个是宏观上说的,但是在微观角度,其实是通过快速切换时间片的方式实现的。
线程: 这个可以理解为进程中独立执行的子任务。就是一个程序比如说QQ中的多个功能都是可以同时运行的。对于单独的任务来讲都是线程在在运行的。
那么使用多线程的好处是什么呢?
现在的CPU处理任务是很快的,为了提高CPU的利用率也就是不让他闲在那里,通过CPU在多个任务间的来回切换,提高系统运行效率。
一个进程在运行的时候至少会有一个线程在运行,在Java中也是这样,我们知道运行Java程序都需要有一个入口函数也就是我们的main函数,其实每一个Java程序都对应着一个JVM实例,所以当我们运行一个Java程序时,JVM创建一个JVM实例也就是一个程序,而这个伴随着该进程运行的线程就是主线程
看代码:
执行结果如下:
控制台中的main是正在执行main方法的线层的名字,控制台中的main和main方法没有任何关系,只是一个线程的名字而已。
实现多线程有多种方式,不仅仅局限于我下面要说的这两种第一种就是继承Thread另一种就是实现Runnable接口。
再说他们之前我们先看一段JDK中的源码如下:
由于Thread类实现了Runnable接口,通过对于Java多态和继承的理解我们可以想到下面这些:
由于Java是单继承所以使用继承Thread的方式创建新的线程的时候就是不支持多继承,如果我们想要实现多继承那么我们就可以通过实现Runnable接口的方式来创建新的线程,从本质上讲都是通过Runnable接口来创建线程,所以这两种方式创建的线程在工作时本质上是一样的。
使用继承Thread方式创建多线程:
结果如下:
通过start()方法来启动线程。
结果和上面的一样。
- 温故而知新之Java多线程编程(一)
- ASP.NET温故而知新学习系列之ASP.NET多线程编程—.NET下的多线程编程临界区(八)
- ASP.NET温故而知新学习系列之ASP.NET多线程编程—.NET下的多线程编程应用程序域(七)
- 温故而知新(一)Java基础:基本数据类型
- 温故而知新-----一、Java常识
- Java基础之(三十七)Java多线程编程<一>
- Java多线程编程(一)
- Java多线程编程(一)
- 温故而知新(一)
- 温故而知新(一)TreeMap
- ASP.NET温故而知新学习系列之ASP.NET多线程编程—多线程查询数据库记录
- ASP.NET温故而知新学习系列之ASP.NET多线程编程—.NET下的多线程编程委托使用的实例(五)
- ASP.NET温故而知新学习系列之ASP.NET多线程编程—.NET下的多线程编程利用thread.Start()传递参数(四)
- Java多线程编程(一)
- Java多线程编程一
- Java多线程编程(一)
- Java多线程编程(一)-多线程编程设计要点
- ASP.NET温故而知新学习系列之ASP.NET中的多线程编程—1-线程机制
- 机器学习:方差Variance与偏差Bias
- 初学C程序
- Android 跑马灯 文字滚动
- 1053
- 深入理解Java:SimpleDateFormat安全的时间格式化
- 温故而知新之Java多线程编程(一)
- redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
- 1103
- [平面图 贪心 || 最大流] BZOJ 2939 [Poi2000]滑雪 Skiers
- Netty系列之Netty高性能之道
- AC自动机
- python学习笔记(21)--类的详解3-属性函数(@property)
- 1107
- javaWeb_Tomcat 安装与配置——day_01