Java 多线程笔记】的更多相关文章

最近课上可摸鱼时间较多,因此并发开坑学习 本篇学习自Java多线程编程实战指南 目前进展:刚开坑,处于理解概念阶段 本篇学习自Java多线程编程实战指南 Q.进程和线程的区别 进程Process是程序运行的实例,在Java的范畴中,运行一个Java程序的实质是启动一个JVM进程,也就是一个运行的Java程序就是一个Java虚拟机进程(Java Web服务器是一个进程同时运行多个Java Web应用) 进程是程序向操作系统申请资源(内存空间.文件句柄等)的基本单位,而线程Thread是进程中可独立…
多线程作为Java中很重要的一个知识点, 一.线程的生命周期及五种基本状态 关于Java中线程的生命周期,首先看一下下面这张较为经典的图: 上图中基本上囊括了Java中多线程各重要知识点.掌握了上图中的各知识点,Java中的多线程也就基本上掌握了.主要包括: Java线程具有五中基本状态 新建状态(New):当线程对象对创建后,即进入了新建状态,如:Thread t = new MyThread(); 就绪状态(Runnable):当调用线程对象的start()方法(t.start();),线程…
1.线程的三种创建方式 对比三种方式: 通过继承Thread类实现 通过实现Runnable接口 实现Callable接口 第1种方式无法继承其他类,第2,3种可以继承其他类: 第2,3种方式多线程可以共享同一个target对象,多个线程处理同一个资源: 一般使用第2,3种方式创建线程. 2.线程的生命周期 1.新建(new) 2.就绪(start) 3.运行(获得cpu资源) 4.阻塞(sleep,IO阻塞等)4.死亡(执行完成,Exception/Error) 3.线程常用方法 join()…
1.线程,进程和多线程 1.程序:指指令和数据的有序集合,其本身没有任何意义,是一个静态的概念 2.进程:指执行程序的一次执行过程,是一个动态的概念.是系统资源分配的单位(注意:很多多线程是模拟出来的,真正的多线程是指有多个cpu,即多核,如服务器.即在一个cpu的情况下,在同一时间点,cpu只能执行一个代码,因为切换的很快,所以就有同时执行的错觉) 3.线程:通常一个进程中可以包含若干个线程,一个进程中至少有一个线程.线程是cpu调度和执行的单位 4.并行:指在同一时刻,有多条指令在多个处理器…
资料来源于网络,仅供参考学习.   1.A Java program ends when all its threads finish (more specifically, when all its non-daemon threads finish). If the initial thread (the one that executes the main() method) ends, the rest of the threads will continue with their ex…
一,线程的状态 1,新建状态:新创建了一个线程对象 2,就绪状态:线程创建对象后,线程调用star()的方法,等待获取CPU的使用权. 3,运行状态:获取了cpu的使用权,执行程序代码 4,阻塞状态:因为某种原因放弃了cpu的使用权,线程停止运行.直到线程进入就绪状态,才有机会进入到运行状态. 阻塞状态3钟情况: 1,等待阻塞:运行的线程执行wait()方法,jvm会把线程放入等待池中. 2,同步阻塞:运行的线程在获取对象的同步锁是,若改同步锁被其他线程占用,jvm会把线程放入等待池中 3,其他…
什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条线程访问,一条线程在执行一个循环的过程中被中断,下一个线程则出现错误 因此,线程任务中可能引起错误的地方应当被一次执行完毕 同步代码块 用同步代码块改写上面的代码 package testpack; public class Test1 { public static void main(Strin…
创建线程 创建线程的方式: 继承java.lang.Thread 实现java.lang.Runnable接口 所有的线程对象都是Thead及其子类的实例 每个线程完成一定的任务,其实就是一段顺序执行的代码 继承java.lang.Thread创建线程 public class Test1 { public static void main(String[] args){ System.out.println("现在是主线程: "+Thread.currentThread()); //…
目录: 线程间的通信示例 等待唤醒机制 等待唤醒机制的优化 线程间通信经典问题:多生产者多消费者问题 多生产多消费问题的解决 JDK1.5之后的新加锁方式 多生产多消费问题的新解决办法 sleep和wait的区别 停止线程的方式 守护线程 线程的其他知识点 一.线程间的通信示例 返目录回 多个线程在处理同一资源,任务却不同. 假设有一堆货物,有一辆车把这批货物往仓库里面运,另外一辆车把前一辆车运进仓库的货物往外面运.这里货物就是同一资源,但是两辆车的任务却不同,一个是往里运,一个是往外运. 下面…
一.线程类  1.新建状态(New):新创建了一个线程对象.        2.就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法.该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权.        3.运行状态(Running):就绪状态的线程获取了CPU,执行程序代码.        4.阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行.直到线程进入就绪状态,才有机会转到运行状态.阻塞的情况分三种:   …
实际开发中,我们经常会接触到生产消费者模型,如:Android的Looper相应handler处理UI操作,Socket通信的响应过程.数据缓冲区在文件读写应用等.强大的模型框架,鉴于本人水平有限目前水平只能膜拜,本次只能算学习笔记,为了巩固自己对Java多线程常规知识点的理解,路过大神还望能指导指导.下面一段代码是最常规的生产者消费者的例子: package com.zhanglei.demo; import java.util.ArrayList; import java.util.List…
JAVA多线程学习笔记(1) 由于笔者使用markdown格式书写,后续copy到blog可能存在格式不美观的问题,本文的.mk文件已经上传到个人的github,会进行同步更新.github传送门 一.创建新进程 由于这部分比较基础,这里不过多赘述,主要以代码呈现 1.java.lang.Thread的extends public class MyThread extends Thread {    public void run() {       ...   }}​public class…
一.说明 周末抽空重新学习了下多线程,为了方便以后查阅,写下学习笔记. 有效利用多线程的关键是理解程序是并发执行而不是串行执行的.例如:程序中有两个子系统需要并发执行,这时候需要利用多线程编程. 通过多线程的使用,可以编写出非常高效的程序.但如果创建了太多的线程,程序执行的效率反而会降低. 同时上下文的切换开销也很重要,如果创建太多的线程,CPU花费在上下文的切换时间将对于执行程序的时间. 二.Java多线程编程 概念 在学习多线程时,我们应该首先明白另外一个概念. 进程:是计算机中的程序关于某…
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76730459冷血之心的博客) 博主准备恶补一番Java高并发编程相关知识,接下来将阅读该书,并且进行比较详细的总结,好记性不如烂笔头,加油. Java多线程编程实战指南(核心篇)读书笔记(五),主要记录该书第9章和第11/12章的基本概念等知识,欢迎关注本博客. 目录: Java多线程编程实战指南(核心篇)读书笔记(一) Java多线程编程实战指南(核心篇)读书笔…
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76690961冷血之心的博客) 博主准备恶补一番Java高并发编程相关知识,接下来将阅读该书,并且进行比较详细的总结,好记性不如烂笔头,加油. Java多线程编程实战指南(核心篇)读书笔记(四),主要记录该书第七章和第八章的基本概念等知识,后续部分将会持续更新哦~欢迎关注本博客. 目录: Java多线程编程实战指南(核心篇)读书笔记(一) Java多线程编程实战指南…
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76686044冷血之心的博客) 博主准备恶补一番Java高并发编程相关知识,接下来将阅读该书,并且进行比较详细的总结,好记性不如烂笔头,加油. Java多线程编程实战指南(核心篇)读书笔记(三),主要记录该书第五章和第六章的基本概念等知识,后续部分将会持续更新哦~欢迎关注本博客. 目录: Java多线程编程实战指南(核心篇)读书笔记(一) Java多线程编程实战指南…
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76651408冷血之心的博客) 博主准备恶补一番Java高并发编程相关知识,接下来将阅读该书,并且进行比较详细的总结,好记性不如烂笔头,加油. Java多线程编程实战指南(核心篇)读书笔记(二),主要记录该书第三章的基本概念等知识,后续部分将会持续更新哦~欢迎关注本博客. 目录: Java多线程编程实战指南(核心篇)读书笔记(一) Java多线程编程实战指南(核心篇…
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76422930冷血之心的博客) 博主准备恶补一番Java高并发编程相关知识,接下来将阅读该书,并且进行比较详细的总结,好记性不如烂笔头,加油. Java多线程编程实战指南(核心篇)读书笔记(一),主要记录该书前两章的基本概念等知识,后续部分将会持续更新哦~欢迎关注本博客. 目录: Java多线程编程实战指南(核心篇)读书笔记(一) Java多线程编程实战指南(核心篇…
本篇笔记记录一些在Java多线程编程中常见的关键字,比较简单和基础的就不写太详细了. 一.Thread类(其实也是应用了Runnable接口)和Runnable接口(只有一个run方法,应用该类必须重写run方法) 一般我们定义一个线程类,可以继承Thread类或者应用Runnable接口,不管是继承哪个,都要重写run方法. 比如我们定义一个线程类: public class Threadtest implements Runnable { @Override void run() { //写…
本篇文章主要是总结Java多线程/高并发编程的知识点,由浅入深,仅作自己的学习笔记,部分侵删. 一 . 基础知识点 1. 进程于线程的概念 2.线程创建的两种方式 注:public void run()方法提供了线程实际工作的代码: 继承Thread类的方法存在单继承的缺陷: Runnable的代码可以被多个线程(Thread实例)共享,适合于多个线程处理统一资源的情况: 3. Thread类的常用方法   4. Java线程正确停止的方法 最常用的方法是设置退出旗标(标志),要注意,stop方…
1. 线程.进程.多线程: 进程是正在执行的程序,线程是进程中的代码执行,多线程就是在一个进程中有多个线程同时执行不同的任务,就像QQ,既可以开视频,又可以同时打字聊天. 2.线程的特点: 1.运行任何一个java程序,jvm在运行时都会创建一个main线程来执行main方法. 2.一个java应用程序至少有两个线程,一个是主线程,负责main方法的执行,一个是垃圾回收器线程,负责回收垃圾. 3.我们可以利用Thread.currentThread().getName()获得当前线程名字. 3.…
java多线程下的对象及变量的并发访问 上一节讲到,并发访问的时候,因为是多线程,变量如果不加锁的话,会出现“脏读”的现象,这个时候需要“临界区”的出现去解决多线程的安全的并发访问.(这个“脏读”的现象不会出现在方法内部的私有变量中,因为其私有的特性,永远都是线程安全的) 目前锁有三种:synchronized / volatile / Lock 三类锁各有所长,本节先介绍关键字 :synchronized synchronized关键字用来实现线程之间同步互斥. public class Te…
<Java多线程编程实战指南(核心篇)>阅读笔记 */--> <Java多线程编程实战指南(核心篇)>阅读笔记 Table of Contents 1. 线程概念 1.1. 进程.线程 1.2. Java中线程的创建 1.3. 线程(Thread)的属性 1.4. Thread类的常用方法 1.5. 线程的层次关系 1.6. 线程的生命周期 2. 多线程编程 2.1. 串行.并发与并行 2.2. 多线程编程中存在的问题 2.2.1. 竞态(Race Condition) 2.…
Java 多线程与并发[原理第二部分笔记] 什么是Java内存模型中的happens-before Java内存模型,即JMM,本身是一种抽象的概念,并不是真实存在的,他描述的是一组规则或者说是一种规范,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式 JMM中的主内存 主内存主要存储的是Java的实例对象,其中还包括了类里面的成员变量,类信息,常量以及静态变量等等,其属于静态数据区,多线程并发操作时会引发线程安全的问题 JMM中的工作内存 其主要存储当前…
Java 多线程与并发[原理第一部分笔记] Synchronized synchronized的基本含义以及使用方式 在Java中线程安全问题的主要诱因就是存在共享数据(也称为临界资源)以及存在多条线程共同操作这些共享数据 解决问题的根本方法是,在同一时刻有且只有一个线程在操作共享数据,其他数据必须等到该线程处理完数据后再对共享数据进行操作 此时就引入了互斥锁,互斥锁的特性有互斥性(即同一时间只允许一个线程持有某个对象锁,通过这种特性来实现多线程的协调机制,这样在同一时间只有一个线程对需要同步的…
Java 多线程与并发[知识点笔记] Java多线程与并发 先说一下线程与进程的由来: 在初期的计算机,计算机只能串行执行任务,并且需要长时间的等待用户的输入才行 到了后来,出现了批处理,可以预先将用户的指令集中成清单,然后批量串行处理用户指令,但是这仍然无法并发执行 然后进程就出现了,进程独占内存空间,保存各自运行状态,相互间不干扰且可以互相切换,为并发处理任务提供了可能,这就解决了无法并发的情况 但是因为一个进程一段时间只做一个事情,如果一个进程有多个任务,只能一个一个的处理,甚是麻烦,因为…
进程:正在执行中的程序,其实是应用程序在内存中运行的那片空间.(只负责空间分配) 线程:进程中的一个执行单元,负责进程汇总的程序的运行,一个进程当中至少要有一个线程. 多线程:一个进程中时可以有多个线程的,这个应用程序也可以称之为多线程程序. 程序启动了多线程,有什么作用呢? 答:1.可以实现多部分程序同时执行,专业术语称之为并发. 2.多线程的使用可以合理使用CPU的资源,如果线程过多会导致降低性能. 3.CPU处理程序时是通过快速切换完成的,在我们看来好像是随机一样. /**********…
Java并发编程中使用Executors类创建和管理线程的用法 1.类 Executors Executors类可以看做一个“工具类”.援引JDK1.6 API中的介绍: 此包中所定义的 Executor.ExecutorService.ScheduledExecutorService.ThreadFactory 和 Callable 类的工厂和实用方法.此类支持以下各种方法: 创建并返回设置有常用配置字符串的 ExecutorService 的方法. 创建并返回设置有常用配置字符串的 Sche…
一.Java中创建线程方法 1. 继承Thread类创建线程类 定义Thread类的子类,重写该类的run()方法.该方法为线程执行体. 创建Thread子类的实例.即线程对象. 调用线程对象的start()方法启动该线程,示例代码如下: public class ThreadTest extends Thread{ int i = 0; //重写run方法,run方法的方法体就是现场执行体 public void run() { for(;i<10;i++){ System.out.print…
下了这本书<Java多线程编程指南-设计模式篇>, 还有另一本<JAVA多线程设计模式>,据说内容有重复,结合着看.…