java多线程编程(1) 线程的基本知识

在前面研究过多线程与进程的区别。

这里在稍微总结一下:

进程:程序动态的一次执行过程。

线程:可以只是程序员的一部分的执行过程

每个进程有多个线程组成,在java程序中,至少两个线程一个是垃圾回收线程和main线程。

线程占有的资源更少,早java中就是每个线程都有自己的工作区,就是有自己独立的栈空间。多个线程共享一些内存资源,堆是共享的。

多线程的力度小,并发度高,这样系统的吞吐量就很大,只有好处吗?调度和执行线程是需要资源的,就是像是数据库中的索引和数据库中的锁一个道理,并发会带来什么问题呢?跟db,os一样一样的。

1.丢失更新(两个人同时读取一个账号为1000元,一个update 为1000-10,另一个Upadate为1000-800,根据先后顺序,只有200或者990写进数据库);

2.读取脏数据

3.不可重复读

4死锁的产生 

死锁产生4个的必要条件:a.互斥访问b.不可剥夺c.请求和保持d.成环等待

破解期中之一就ok了,但是其实这里实现死锁避免的思路主要可以考虑请求和保持,还有成环等待。

对于请求和保持,就是让线程一次要么申请全部线程,要不申请不到,这个效率太低了。

如何避免环呢?给资源排序?数据库中给事务加了年龄,让年老的等年轻的货年轻的等年老的,不会出现相互等待。

死锁的检测方法:死锁可以通过一个等待图中是否有环来判断,如何判断有向图有环?对了(topsort和dfs的方法)

如果检测到死锁呢?可以剥夺其中若干事务的资源,就可以了。

另外死锁是一种僵持的状态,如果没有外力作用,系统不能推进下去了。

 

java多线程编程(1) 线程的基本知识

时间: 2024-10-19 09:15:34

java多线程编程(1) 线程的基本知识的相关文章

Java 多线程 编程 教程 线程的运行与控制

在多个线程同时运行时,就存在多个线程之间的调度控制.资源分配等.本节就来讲解线程使用中的一系列控制命令和使用方法 线程的启动start().join()与停止stop() 线程的休眠sleep().挂起yield 线程的同步synchronized 线程的同步锁机制:wait().notify()和notifyAll() start()启动线程,当线程创建之后,利用start方法启动线程.此外还可以利用join方法让线程立即执行 sleep()让当前线程暂停一段时间之后继续执行.sleep()方

Java多线程编程基础之线程对象

在进入java平台的线程对象之前,基于基础篇(一)的一些问题,我先插入两个基本概念. [线程的并发与并行] 在单CPU系统中,系统调度在某一时刻只能让一个线程运行,虽然这种调试机制有多种形式(大多数是时间片轮巡为主),但无论如何,要通过不断切换需要运行的线程让其运行的方式就叫并发(concurrent).而在多CPU系统中,可以让两个以上的线程同时运行,这种可以同时让两个以上线程同时运行的方式叫做并行(parallel). 在上面包括以后的所有论述中,请各位朋友谅解,我无法用最准确的词语来定义储

Android多线程编程之线程池学习篇(一)

Android多线程编程之线程池学习篇(一) 一.前言 Android应用开发中多线程编程应用比较广泛,而应用比较多的是ThreadPoolExecutor,AsyncTask,IntentService,HandlerThread,AsyncTaskLoader等,为了更详细的分析每一种实现方式,将单独成篇分析.后续篇章中可能涉及到线程池的知识,特此本篇分析为何使用线程池,如何使用线程池以及线程池的使用原理. 二.Thread Pool基础 进程代表一个运行中的程序,一个运行中的Android

Java多线程编程详解

线程的同步 由于同一进程的多个线程共享同一片存储空间,在带来方便的同时,也带来了访问冲突这个严重的问题.Java语言提供了专门机制以解决这种冲突,有效避免了同一个数据对象被多个线程同时访问. 由于我们可以通过 private 关键字来保证数据对象只能被方法访问,所以我们只需针对方法提出一套机制,这套机制就是 synchronized 关键字,它包括两种用法:synchronized 方法和 synchronized 块. 1. synchronized 方法:通过在方法声明中加入 synch

JAVA读书推荐----《深入分析Java Web技术内幕》--《java多线程编程核心技术》--《大型网站技术架构 核心原理与案例分析》-《Effective Java中文版》

(1)  首先推荐的不是一本书,而是一个博客,也是我们博客园另外一位博友java_my_life. 目前市面上讲解设计模式的书很多,虽然我前面讲了看书是最好的,但是对设计模式感兴趣的朋友们,我推荐的是这个博客.这位博友的设计模式讲得非常非常好,我认为90%的内容都是没有问题且很值得学习的,其讲解设计模式的大体路线是: 1.随便开篇点明该设计模式的定义 2.图文并茂讲解该设计模式中的结构 3.以详细的代码形式写一下该种设计模式的实现 4.补充内容 5.讲解该设计模式的优缺点 对于一个设计模式我们关

《Java 多线程编程核心技术》- 笔记

作为业务开发人员,能够在工作中用到的技术其实不多.虽然平时老是说什么,多线程,并发,注入,攻击!但是在实际工作中,这些东西不见得用得上.因为,我们用的框架已经把这些事做掉了. 比如web开发,外面有大量的请求进来,按理说,我们应该考虑并发问题.但其实,spring接到请求,分配到controller之后,就已经是线程安全的了,所以我们要做的就是,从controller开始,到最后请求响应结束,保证线程安全即可. 多线程好像有很多东西需要注意,阅读<Java 多线程编程核心技术>后,做个总结,总

多线程编程之线程基础

前言 此内容是阅读了书籍<JAVA多线程编程核心技术>后作为学习总结的文章,同时也梳理一下内容.建议大家有兴趣都可以阅读一下这本书,对于想了解更多的同学来说是一个很好的教材,同时建议大家多去思考和动手编写代码,融会贯通之后再去看一遍,会有更多的体会.就比如<JVM底层实现最佳实战>的书籍一样,我读了已经不下五遍了,但每次读都能有新的收获一样.希望对大家有帮助. 该篇文章是用于了解多线程的一些基本概念.JDK支持多线程编程的类和方法,接口等. 1.1 进程与线程概念 什么是进程: 进

汪大神Java多线程编程实战

课程目录:├─1│  ├─Java并发编程.png│  ├─源码+ppt.rar│  ├─高并发编程第一阶段01讲.课程大纲及主要内容介绍.wmv│  ├─高并发编程第一阶段02讲.简单介绍什么是线程.wmv│  ├─高并发编程第一阶段03讲.创建并启动线程.mp4│  ├─高并发编程第一阶段04讲.线程生命周期以及start方法源码剖析.mp4│  ├─高并发编程第一阶段05讲.采用多线程方式模拟银行排队叫号.mp4│  ├─高并发编程第一阶段06讲.用Runnable接口将线程的逻辑执行单元

java多线程编程从入门到卓越(超详细总结)

导读:java多线程编程不太熟?或是听说过?或是想复习一下?找不到好的文章?别担心我给你们又安利一波,文章内容很全,并且考虑到很多开发中遇到的问题和解决方案.循环渐进,通俗易懂,文章较长,建议收藏再看! 往期精彩放送:一文搞定Java的输入输出流等常见流 一文搞定Java集合类,你还在为Java集合类而烦恼吗? 文章目录 1.多线程的概念 2.多线程并发 3.多线程程序设计 继承Thread类创建线程 新建类实现Runnable接口创建线程 改进(匿名内部类方式) 获取线程的名字和当前线程对象