java多线程与并发笔记
0.多线程,主要用来提高程序效率,处理耗时的操作。
多个线程写在同一个类里调用,并不是说写在前面的线程就会先运行。各个线程会进行争抢,能抢到系统资源的才会先运行。
因此,同一个程序,多个线程运行,可能每次运行的结果都不一样。
1.线程安全指的是,主要是指多线程操作同一个数据时,防止脏数据的产生,避免数据紊乱。
线程安全的情况:就是当一个线程需要对这个数据进行改写时,会给这个数据上一个同步锁,比如A线程拿到数据后,
给数据加上同步锁,这时候B线程进来了,但是这时候数据已经上锁,B线程则需要等待A线程释放锁之后才能对数据
进行操作,这样就防止了脏数据的产生。
StringBuffer是线程安全的。
2.线程并发,不是物理上的同时发生,而逻辑上的同时发生。
3.同步,异步是什么?
线程同步:多个线程同时访问同一资源,要等当前的线程执行结束,才能执行下一个线程。耗时久,效率低,线程安全。
线程异步:访问资源时,当前线程在执行时,其他的线程也可以执行。
同步的应用:
比如两个人同时在一个银行账户上取钱,卡上共500块,如果不加上同步锁,那么这两个人都能取出500块,共1000块,这明显是不合理的
另外,在java的IO源码中,大量应用了"同步"。如果文件在写入时,不进行线程同步,那么多个人操作同一个文件,会导致数据紊乱。
异步的应用:
比如下载资源耗时比较久,其他线程不用干等着,可以做其他事情,不会因此而耽误。
4.synchronized。
由于同一线程的多个线程共享同一片存储空间,可能会有访问冲突。可以用synchronized这个关键字,
避免同一个数据对象被多个线程同时访问。
synchronized有两种用法:
a、synchronized方法:在方法声明中加入synchronized,可以控制对类成员变量的访问。
b、synchronized块:通过synchronized关键字来声明synchronized块。
5.进程是操作系统的单位,线程是Cpu调度的单位。一个进程可以有多个线程。
6.java线程有6种状态:新建线程new,启动线程runnable,阻塞block,计时等待timed_waiting,等待线程waiting,终止线程terminated
7.Thread.yield( )方法:让所有的线程重新争抢执行权。
8.wait和sleep的区别在哪里?调用sleep方法的线程不释放锁,但调用wait方法的线程释放锁。
9.Thread.join()方法:存在一个线程A,现在插入线程B,要求B先执行完毕,然后再继续执行线程A。
其实就相当于日常生活中的插队。。
10.线程同步:多线程中,可能会发生线程抢占资源的问题。为了防止冲突,java提供线程同步的机制保证线程安全。
11.实现Runnable接口
public class ThreadTest implements Runnable{
...
public void run() {}
}
ThreadTest t=new ThreadTest();
Thread t1=new Thread(t); //为什么要用对象实例化来新建线程呢?直接使用t不好吗?
//runnable里面,没有start方法,所以必须把对象放到Thread线程里。
}
12.
串行、并行:
指的是任务的执行方式。
串行是指多个任务时,各个任务按顺序执行,完成一个之后才能进行下一个。
并行指的是多个任务可以同时执行。
异步是多个任务并行的前提条件。
java多线程与并发笔记的更多相关文章
- Java 多线程高并发编程 笔记(一)
本篇文章主要是总结Java多线程/高并发编程的知识点,由浅入深,仅作自己的学习笔记,部分侵删. 一 . 基础知识点 1. 进程于线程的概念 2.线程创建的两种方式 注:public void run( ...
- Java 多线程与并发【原理第二部分笔记】
Java 多线程与并发[原理第二部分笔记] 什么是Java内存模型中的happens-before Java内存模型,即JMM,本身是一种抽象的概念,并不是真实存在的,他描述的是一组规则或者说是一种规 ...
- Java 多线程与并发【原理第一部分笔记】
Java 多线程与并发[原理第一部分笔记] Synchronized synchronized的基本含义以及使用方式 在Java中线程安全问题的主要诱因就是存在共享数据(也称为临界资源)以及存在多条线 ...
- Java 多线程与并发【知识点笔记】
Java 多线程与并发[知识点笔记] Java多线程与并发 先说一下线程与进程的由来: 在初期的计算机,计算机只能串行执行任务,并且需要长时间的等待用户的输入才行 到了后来,出现了批处理,可以预先将用 ...
- JAVA 多线程和并发学习笔记(三)
Java并发编程中使用Executors类创建和管理线程的用法 1.类 Executors Executors类可以看做一个“工具类”.援引JDK1.6 API中的介绍: 此包中所定义的 Execut ...
- Java 多线程:并发编程的三大特性
Java 多线程:并发编程的三大特性 作者:Grey 原文地址: 博客园:Java 多线程:并发编程的三大特性 CSDN:Java 多线程:并发编程的三大特性 可见性 所谓线程数据的可见性,指的就是内 ...
- JAVA多线程和并发基础面试问答(转载)
JAVA多线程和并发基础面试问答 原文链接:http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-ans ...
- [转] JAVA多线程和并发基础面试问答
JAVA多线程和并发基础面试问答 原文链接:http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-ans ...
- JAVA多线程和并发基础面试问答
转载: JAVA多线程和并发基础面试问答 多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一.在这里,从面试的角度列出了大部分重要的问题,但是你仍然应该牢固的掌握Java多线程基础知识来对 ...
随机推荐
- 《算法》第五章部分程序 part 6
▶ 书中第五章部分程序,包括在加上自己补充的代码,非确定性有穷自动机(NFA),grep 命令(利用 NFA 匹配) ● 非确定性有穷自动机(NFA) package package01; impor ...
- Your password has expired. To log in you must change it using a client that supports expired passwords.
[Lk] ERROR [11-26 23:01:51] [main] net.jweb.listener.AppInitializerListener.contextInitialized(231) ...
- 开源 人脸识别 openface 实用介绍 实例演示 训练自己的模型
1.OpenFace 是 卡耐基梅陇(CMU)大学的一个图像+机器学习项目,整体程序包含:人脸发现,特征提取,特征神经网络训练,人脸识别这四部分. github https://github.co ...
- Intellij IDEA编辑golang时无法加载系统GOPATH变量
问题: 编译go项目时,报找不到包.从日志看,GOPATH与系统设置的不一致. 如何解决:系统的gopath路径,加到Project libraries中 参考:https://segmentfaul ...
- delphi Berlin Could not load SSL library.
delphi Berlin Could not load SSL library. TIdSSLIOHandlerSocketOpenSSL 解决办法:下载合适的版本文件libssl32.dll Id ...
- 【JEECG技术文档】JEECG在线聊天插件功能集成文档
原文地址:http://jeecg.iteye.com/blog/2320670 JEECG在线聊天插件功能集成文档 前提: 采用jeecg_3.6.3版本以上(Maven工程) 插件项目: 在线聊天 ...
- 清除linux服务器缓存 clean.sh
#!/bin/sh#根据输入参数创建后台进程的日志名称#FileName: createNohupPhpForbak.sh #export JAVA_HOME=/root/lib/jdk1.7.0_7 ...
- vue .map 文件
参数: productionSourceMap:false 这个改为false.去掉打包产生的map文件 map文件的作用:定位线上错误代码位置;
- sublime text3:下载代码格式化插件和汉化插件
1.从官网下载sublime text3 2.下载插件工具 A.使用Ctrl+`(Esc键下方)快捷键或者通过View->Show Console菜单打开命令行 将以下代码复制后粘贴,然后按En ...
- unity 4.6.1脚本解析出错,没有激活的勾,方法顺序出错
检查方法声明上的注释:如/**xx*/或/*xx*/改为//形式 没有激活的勾: 1.如/**xx*/或/*xx*/改为//形式 2.必须保留Start函数