![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
xiasheng
具备创新意识、能独立分析和解决问题、具有较好的动手能力,对待工作细致负责、组织管理能力强。善于学习新技术,肯钻研,肯吃苦,纪律观念极强,为人正直,乐于助人,善于与他人协同工作。 具备项目的开发和管理经验,曾经参与多个实际项目的开发,对项目整个开发流程熟悉,始终贯彻以用例为驱动,以体系结构为核心,增量和迭代式开发的思想。能够协调组员共同工作,使整个团队上下一条心,共同进步。
展开
-
概念与原理
SCJP5学习笔记 一、操作系统中线程和进程的概念 现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe就是一个进程。 线程是指进程中的一个执行流程,一个进程中可以运行多个线程。比如java.exe进程中可以运行很多线...原创 2009-11-12 12:14:13 · 104 阅读 · 0 评论 -
线程的同步—同步方法
线程的同步是保证多线程安全访问竞争资源的一种手段。 线程的同步是Java多线程编程的难点,往往开发者搞不清楚什么是竞争资源、什么时候需要考虑同步,怎么同步等等问题,当然,这些问题没有很明确的答案,但有些原则问题需要考虑,是否有竞争资源被同时改动的问题? 在本文之前,请参阅《Java线程:线程的同步与锁》,本文是在此基础上所写的。 对于同步,在具体的Java代码中需要完成一下两个操...原创 2009-11-12 15:16:42 · 90 阅读 · 0 评论 -
线程的调度—守护线程
守护线程与普通线程写法上基本么啥区别,调用线程对象的方法setDaemon(true),则可以将其设置为守护线程。 守护线程使用的情况较少,但并非无用,举例来说,JVM的垃圾回收、内存管理等线程都是守护线程。还有就是在做数据库应用时候,使用的数据库连接池,连接池本身也包含着很多后台线程,监控连接个数、超时时间、状态等等。 setDaemon方法的详细说明: public...原创 2009-11-12 15:15:06 · 77 阅读 · 0 评论 -
线程的调度—合并
线程的合并的含义就是将几个并行线程的线程合并为一个单线程执行,应用场景是当一个线程必须等待另一个线程执行完毕才能执行时可以使用join方法。 join为非静态方法,定义如下: void join() 等待该线程终止。 void join(long millis) 等待该线程终止的时间最长为 millis 毫秒。 void join(long ...原创 2009-11-12 15:13:48 · 83 阅读 · 0 评论 -
线程的调度—让步
线程的让步含义就是使当前运行着线程让出CPU资源,但是然给谁不知道,仅仅是让出,线程状态回到可运行状态。 线程的让步使用Thread.yield()方法,yield() 为静态方法,功能是暂停当前正在执行的线程对象,并执行其他线程。 /** * Java线程:线程的调度-让步 * * @author leizhimin 2009-11-4 9:02:40 */ public ...原创 2009-11-12 15:12:25 · 101 阅读 · 0 评论 -
线程的调度—优先级
与线程休眠类似,线程的优先级仍然无法保障线程的执行次序。只不过,优先级高的线程获取CPU资源的概率较大,优先级低的并非没机会执行。 线程的优先级用1-10之间的整数表示,数值越大优先级越高,默认的优先级为5。 在一个线程中开启另外一个新线程,则新开线程称为该线程的子线程,子线程初始优先级与父线程相同。 /** * Java线程:线程的调度-优先级 * * @autho...原创 2009-11-12 15:11:20 · 183 阅读 · 0 评论 -
线程的调度—休眠
Java线程调度是Java多线程的核心,只有良好的调度,才能充分发挥系统的性能,提高程序的执行效率。 这里要明确的一点,不管程序员怎么编写调度,只能最大限度的影响线程执行的次序,而不能做到精准控制。 线程休眠的目的是使线程让出CPU的最简单的做法之一,线程休眠时候,会将CPU资源交给其他线程,以便能轮换执行,当休眠一定时间后,线程会苏醒,进入准备状态等待执行。 线程休眠的方...原创 2009-11-12 15:09:57 · 100 阅读 · 0 评论 -
线程的同步和锁
一、同步问题提出 线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏。 例如:两个线程ThreadA、ThreadB都操作同一个对象Foo对象,并修改Foo对象上的数据。 public class Foo { private int x = 100; public int getX() { return x; } ...原创 2009-11-12 15:08:09 · 84 阅读 · 0 评论 -
线程的交互
SCJP5学习笔记 线程交互是比较复杂的问题,SCJP要求不很基础:给定一个场景,编写代码来恰当使用等待、通知和通知所有线程。 一、线程交互的基础知识 SCJP所要求的线程交互知识点需要从java.lang.Object的类的三个方法来学习: void notify() 唤醒在此对象监视器上等待的单个线程。 void notifyAll() ...原创 2009-11-12 14:12:50 · 88 阅读 · 0 评论 -
线程状态的转换
SCJP5学习笔记 一、线程状态 线程的状态转换是线程控制的基础。线程状态总的可分为五大状态:分别是生、死、可运行、运行、等待/阻塞。用一个图来描述如下: 1、新状态:线程对象已经创建,还没有在其上调用start()方法。 2、可运行状态:当线程有资格运行,但调度程序还没有把它选定为运行线程时线程所处的状态。当start()方法调用时,线程首先进入可运行...原创 2009-11-12 13:06:06 · 88 阅读 · 0 评论 -
线程栈模型与线程的变量
SCJP5学习笔记 要理解线程调度的原理,以及线程执行过程,必须理解线程栈模型。 线程栈是指某时刻时内存中线程调度的栈信息,当前调用的方法总是位于栈顶。线程栈的内容是随着程序的运行动态变化的,因此研究线程栈必须选择一个运行的时刻(实际上指代码运行到什么地方)。 下面通过一个示例性的代码说明线程(调用)栈的变化过程。 这幅图描述在代码执行到两个不同时刻1、...原创 2009-11-12 13:01:49 · 95 阅读 · 0 评论 -
创建与启动
SCJP5学习笔记 一、定义线程 1、扩展java.lang.Thread类。 此类中有个run()方法,应该注意其用法: public void run() 如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。 Thread 的子类应该重写该方法。 ...原创 2009-11-12 13:00:22 · 88 阅读 · 0 评论 -
线程的同步—同步代码块
对于同步,除了同步方法外,还可以使用同步代码块,有时候同步代码块会带来比同步方法更好的效果。 追其同步的根本的目的,是控制竞争资源的正确的访问,因此只要在访问竞争资源的时候保证同一时刻只能一个线程访问即可,因此Java引入了同步代码快的策略,以提高性能。 在上个例子的基础上,对oper方法做了改动,由同步方法改为同步代码块模式,程序的执行逻辑并没有问题。 /**...原创 2009-11-12 15:18:15 · 95 阅读 · 0 评论