- 浏览: 414984 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (158)
- SpringBoot (10)
- vue.js (4)
- 2017基础知识 (2)
- jquery (4)
- extjs (8)
- spring (13)
- Java基础 (24)
- ibatis (2)
- oracle (18)
- 服务器配置 (8)
- maven (7)
- web应用开发 (14)
- 数据库 (9)
- 第三方依赖 (3)
- 百味人生 (7)
- svn (1)
- 问题一堆 (2)
- 测试驱动开发 (1)
- webServices (2)
- 网络编程 (2)
- 其它 (4)
- hibernate (2)
- ec标签序号列 (1)
- javascript (1)
- ActiveMQ (2)
- linux (5)
- UI (1)
- 问题汇集 (1)
- redis (1)
最新评论
-
jackson200:
讲解的狠不错!谢谢!
spring注入原理 -
阳光泛滥的日子:
讲的很透彻,受教了 。
spring中注解的实现原理 -
liudechao9:
最近在研究这方面,很不错,但是多线程并发的时候可能会出问题,而 ...
spring中注解的实现原理 -
小帅1127:
厉害啊 我的哥
spring中注解的实现原理 -
phoenixpaul:
...
Oracle存储过程和程序包
1、线程是什么?
几乎所有的操作系统都支持同事运行多个任务,一个任务通常就是一个程序,每个运行中的程序就是一个进程。当一个程序运行时,内部可能包含了多个顺序执行流,每个顺序执行流就是一个线程。
多线程则扩展了多进程的概念。使得同一个进程可以同时并发处理多个任务。线程(Thread)也被成为轻量级的进程(lightweight process),线程是进程的执行单元。就想进程在操作系统中的地位一样,线程是程序中独立的并发的执行流。当程序被处理化后,主线程就被创建了。对于大多数应用程序来说,通常都会有一条主线程,但我们也可以在该进程中创建多条执行流,这些顺序执行流就是线程,每条线程都是相互独立的。
线程是独立运行的,它不知道进程中是否还有其它线程存在。线程的执行是抢占式的,也就是说,当前运行的线程在任何时候都有可能被挂起,以便另外一个线程可以运行。
简而言之:一个程序运行后至少有一个进程,而一个进程可以包含多个线程,但至少有一个线程。
2 、线程的创建和使用
Java中使用Thread类来代表线程, 所有的线程对象都必须是Thread类或其子类的实例。每条线程的作用是完成一定的任务,实际上就是执行一段程序流(一段顺序执行的代码)。Java使用run方法来封装这样一段程序流。
(1)、通过继承Thread类,并重写run方法来创建线程类,该run方法体就是代表了线程要完成的任务。所以我们把run方法称为线程体。
package com.yt.manager.thread; /** * @Description: 通过继承Thread来创建线程类 * @ClassName: FirstThread * @Project: base-info * @Author: zxf * @Date: 2011-7-12 */ public class FirstThread extends Thread { // 重写run方法,run方法的方法体就是线程的执行体 @Override public void run() { for (int i = 0; i < 100; i++) { // 通过getName()方法来返回当前线程名 System.out.println(this.getName() + " " + i); } } public static void main(String[] args) { for (int i = 0; i < 100; i++) { // 也可以使用Thread.currentThread().getName()来获取当前的线程名 System.out.println(Thread.currentThread().getName() + " " + i); if (i == 20) { new FirstThread().run(); new FirstThread().run(); } } } } /** * 上面的程序显式的创建了两个子线程,但实际上程序至少有三个线程,程序显式的创建的两条子线程和主线程(main方法就代表线程的执行主题)。 * */
(2)、实现Runnable接口来创建线程类,并实现该接口中的run方法,该run方法同样是该线程的执行体。
package com.yt.manager.thread; /** * @Description:通过实现Runnable接口,并重写run()方法来创建线程类 * @ClassName: SecondThread * @Project: base-info * @Author: zxf * @Date: 2011-7-12 */ public class SecondThread implements Runnable { @Override public void run() { for (int i = 0; i < 100; i++) { System.out.println(Thread.currentThread().getName() + " " + i); } } public static void main(String[] args) { for (int i = 0; i < 100; i++) { System.out.println(Thread.currentThread().getName() + " " + i); if (i == 20) { SecondThread st = new SecondThread(); new Thread(st, "thread_1").start(); new Thread(st, "thread_2").start(); } } } }
以上两种方式的对比:
(1)、采用继承Thread类方式的多线程:
劣势是:因为线程已经继承了Thread类,所以不能再继承其他类。
优势是:编写简单,如果需要访问当前的线程,无效使用Thread.currentThread()方法,直接使用this即可以获取当前线程的实例。
(2)、才用实现Runnable接口方式的多线程。
优势是:线程实现了Runnable接口,还可以继承其他类。在这种方式下,一个多线程可以共享一个target对象,所以非常适合多个线程来处理同一份资源的情况,从而可以将CPU、代码和数据分开,形成清晰的模型,更好的面向对象。
劣势是:变成较为复杂,如果需要访问当前线程,必须使用Thread.currentThread()方法来获取。
3、线程的生命周期:
当线程被创建后,它既不是已启动就进入执行状态,也不会一直处于执行状态,在线程的生命周期中。它要经过新建(new)、就绪(Runnable)、运行(run)、阻塞(Blocked)、死亡(Dead)五种状态。尤其是线程在启动以后,它不会之一霸占这CPU独自运行,所以CPU要在多条线程之间切换,所以线程状态也会在运行、阻塞之间切换。
(1)、当程序通过new关键字创建了一个线程后,该线程就处于新建状态。此时他和其他Java对象一样,仅仅由JVM为其分配了内存,初始化了成员变量的值。此时的线程没有执行start()方法,所以程序不会执行线程体中的线程执行体。
(2)、当线程对象调用了start()方法之后,该线程就处于就绪状态,但是此时线程调度器还没有把该线程设置为当前线程,此时处于就绪状态。当一个线程从等待或者睡眠状态回来之后, 也会处于就绪状态。
(3)、线程调度器把处于就绪状态的线程设置为当前线程,此时线程就进入了运行状态,开始运行run()方法中的代码。
(4)、线程在运行的时候被暂停,通常是为了等待某个时间的发生之后再继续运行。sleep、suspend、wait等方法都可以导致线程阻塞。
(5)、线程会以以下三种方式之一结束,结束后就处于死亡状态。
1、run方法执行完成,线程正常结束。
2、线程抛出一个未捕获的Exception或Error。
3、直接调用线程的stop方法来结束该线程,该方法容易造成死锁,通常不推荐使用。
发表评论
-
采用DES加密解密实现接口的通信加密认证
2018-08-22 09:20 807DES全称Data Encryption Standard, ... -
log4j2 配置
2016-01-06 17:10 71661、log4j2官方下载地址h ... -
本文出一个简单读取JVM内存使用情况的例子
2015-12-07 15:16 792<%@page contentType="t ... -
代替request.getRealPath()
2014-03-21 11:22 1019代替request.getRealPath(); ... -
session超时时间设置方法
2012-11-05 15:11 1140由于session值之前没有设置,以至于刚登录的 ... -
ant 使用
2012-06-25 11:41 1253build.xml <?xml version=&qu ... -
ant 使用
2012-06-25 11:39 2build.xml <?xml version=&qu ... -
java中的排序
2012-02-15 10:01 1027/** * 选择排序:首先第一趟从n个元素中找到最大或最小 ... -
封装类比较出现的问题
2011-10-09 10:24 1191Java为了性能提供了一个类似缓存的东西,不仅仅 ... -
java多线程三:线程同步
2011-07-20 11:21 1593多线程编程是很有趣的事情,它常常容易出现"错误 ... -
java多线程二:控制线程方法
2011-07-20 10:25 1012join线程: 1、Thread线程提供了让一个线程等待另外 ... -
java多线程
2011-07-19 15:06 31、线程是什么? 几乎所有的操作系统都支持 ... -
java多线程
2011-07-19 15:05 21、线程是什么? 几乎所有的操作系统都支持同事运 ... -
java多线程
2011-07-19 15:05 11、线程是什么? 几乎所有的操作系统都支持同事运行多 ... -
java多线程
2011-07-19 14:56 3http://lavasoft.blog.51cto.com/ ... -
java中的IO操作
2011-07-13 14:54 11231、 Java 的 IO 支持通过 ja ... -
多线程下载文件
2011-07-13 14:11 5227网络蚂蚁、FlashGet、迅 ... -
Java垃圾回收机制
2011-07-06 16:55 14971、当程序创建对象时, ... -
java反射机制
2011-06-02 14:06 1024一、定义: 1、在Java运行时环境中,对于任意 ... -
Java序列化
2011-05-30 14:51 1271一、当两个进程在进行 ...
相关推荐
Java线程:概念与原理 Java线程:创建与启动 Java线程:线程栈模型与线程的变量 Java线程:线程状态的转换 Java线程:线程的同步与锁 Java线程:线程的交互 Java线程:线程的调度-休眠 Java线程:线程的调度-...
本文将基于一个具体的Java多线程操作数据库的应用程序,深入探讨其背后的原理、实现细节以及潜在的挑战。 #### 核心知识点: 1. **多线程基础**:多线程是Java编程中的一个重要概念,允许程序同时执行多个任务。在...
本资料详细讲解了Java多线程的原理,并提供了丰富的实战代码,非常适合Java初学者以及希望深入理解多线程的开发者。 1. **线程的基本概念**:线程是程序执行的最小单位,一个进程中可以有多个线程同时运行。Java...
Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,极大地提升了程序的效率和性能。在Java中,实现多线程有两种主要方式:通过实现Runnable接口或者继承Thread类。本案例将深入探讨Java多线程中的关键...
### Java多线程编程经验 #### 一、Java线程:概念与原理 现代操作系统都是多任务操作系统,其中多线程是一种重要的实现多任务的方式。线程是进程内的一个执行单位,一个进程可以包含多个线程。例如,在Java应用...
Java线程:概念与原理 Java线程:创建与启动 Java线程:线程状态的转换 Java线程:线程的同步与锁 一、同步问题提出 二、同步和锁定 三、静态方法同步 四、如果线程不能不能获得锁会怎么样 五、何时需要同步...
#### 二、Java多线程分页查询原理及实现 ##### 1. 分页查询基础概念 分页查询是指在查询数据时,将数据分成多个页面展示,而不是一次性返回所有数据。这种方式能够有效地减少单次查询的数据量,从而提高查询速度和...
### Java多媒体与多线程...通过本次实验,学生不仅掌握了Java多线程编程的基础知识,还学会了如何利用多线程优化程序性能,特别是在多媒体应用领域,如动画、音视频处理等,为后续更复杂的应用开发奠定了坚实的基础。
《Java多线程编程实战指南》这本书深入浅出地讲解了Java多线程的核心概念和实战技巧,分为核心篇和设计模式篇,旨在帮助开发者掌握并应用多线程技术。 1. **线程基础** - **线程的创建**:Java提供了两种创建线程...
本文将深入探讨Java多线程的相关概念、线程类和接口的使用,以及线程的同步与互斥。 首先,我们需要理解进程与线程的基本概念。程序是一组静态指令的集合,而进程则是程序在执行过程中的一个实例,拥有独立的内存...
本文将深入探讨Java多线程的基础概念、基本原理及其在实践中的应用。 #### 二、核心概念 - **进程**: 是操作系统中的一个独立执行单元,拥有自己的内存空间。在多任务操作系统中,可以同时运行多个进程。 - **线程*...
Java多线程是Java编程中的重要概念,尤其在开发高...通过`lec22`中的示例,你可以亲手实践这些概念,深入理解Java多线程的原理和应用。不断练习和探索,你将能够熟练地在实际项目中运用这些知识,提升你的编程技能。
本文将根据提供的文件信息,深入探讨Java多线程的相关概念和技术细节。 #### 二、Java线程基础 ##### 1. 什么是线程? 线程是进程中的最小执行单元,是进程内部的一次独立的控制流程。在Java中,每个进程至少有一...
Java多线程编程实战指南(核心篇) 高清pdf带目录 随着现代处理器的生产工艺从提升处理器主频频率转向多核化,即在一块芯片上集成多个处理器内核(Core),多核处理器(Multicore Processor)离我们越来越近了――如今...
Java多线程是Java编程中的核心概念,尤其对于高级开发者来说,掌握多线程的深入理解和应用至关重要。这本书“java多线程进阶”显然旨在帮助读者深化这方面的理解,打通编程中的“任督二脉”,使开发者能够更加熟练地...
线程池是Java多线程处理的一种优化策略,通过复用已创建的线程来减少线程创建和销毁的开销。Java提供`ExecutorService`接口和`Executors`工厂类来创建线程池。常见的线程池类型有: 1. **FixedThreadPool**:固定...
本篇总结涵盖了Java多线程的基础概念、创建与启动、线程调度、同步与协作以及新特性。 **一、Java线程:概念与原理** 1. **线程与进程**: - **进程**:是操作系统资源分配的基本单位,每个进程都有独立的内存...
Java 多线程原理是一种基于 Java 语言的多线程编程技术,旨在提高程序的执行效率和响应速度。该技术可以使程序同时执行多个任务,从而提高系统的整体性能。 多线程编程的重要概念 1. 进程(Process):程序在内存...
本文将详细介绍Java多线程的基础知识、应用场景以及编程实践,旨在帮助初学者快速掌握多线程编程的核心概念和技术要点。 #### 二、Java多线程基础 ##### 1. 线程的概念 线程是程序执行流的最小单元,是操作系统能够...