多线程总结一:基本概念
一.普通对象,线程对象,线程
普通对象:针对于线程对象而言的。到处可见普通对象,Person p = new Person();一个无头无脑的人就是一个普通对象。
线程对象:线程类的实例对象。我自己定义了一个线程类public class CheckThread extends Thread{...},然后CheckThread ct = new CheckThread(),ct就是线程对象。
线程:代码的一次执行过程。
从概念层面讲,普通对象和线程对象是实实在在的东西,线程是虚的东西。线程好比一条细线。把普通对象和线程对象上的方法串起来执行,得到想要的结果而已。
从内存层面讲,对象就是一块内存地址,里面有数据和运行方法。而线程就是这些方法的一次执行路径。
唯一觉得线程对象和线程有点关系的地方:线程对象定义了线程的一个入口(线程对象的run方法),就好像main方法开启了主线程的一个入口一样。
二.锁和同步
锁是针对对象或者类而言的。Java中每个对象都有一个内置锁。
同步的表现形式为在一个方法前加synchronized关键字,作用为同一时刻,只能有一个线程调用此方法,谁获得了对象锁或类锁,谁就能调用此方法。当程序运行到synchronized同步方法或代码块时才锁才起作用。
类锁:Xxx.class。同一时刻多个线程都想调用setName方法的时候,谁先拿到Xxx类的类锁,谁就能调用。
public static synchronized int setName(String name){
Xxx.name = name;
}
等价于
public static int setName(String name){
synchronized(Xxx.class){
Xxx.name = name;
}
}
对象锁:this。
public synchronized int getX() {
return x++;
}
等价于
public int getX() {
synchronized (this) {
return x;
}
}
线程1对静态同步方法的调用用到类锁,线程2对非静态同步方法的调用用到对象锁,它们之间不会产生阻塞。
一个对象可以同步方法和非同步方法同时存在,线程对同步方法的调用需要获得锁,对非同步方法的调用不需要。
线程1在获得对象A的锁后,正在调用同步方法a,恰好线程2也想调用方法a,因为锁只有一把,所以线程2没法调用方法a,此时线程2进入锁池队列。直到线程1完成对方法a的调用(synchronized结束),释放锁,线程2才能做接下来的事情。
记住一句话:线程想要调用对象或类的同步方法,必须先获得对象或类的锁。
分享到:
相关推荐
根据网上的资料总结的一个springboot 转换pdf Word文档大小最好2m以下 需要安装OpenOffice.org 3.3 链接:https://pan.baidu.com/s/1onrkhBCNlGLEmf3hPwzXWw 密码:8h5a
office文档通过openoffice或者microsoft多线程转换成pdf文档,并通过pdf.js显示
最近用多线程用的比较多自己走了一些弯路,分享出来希望大家少走弯路,C#中的多线程有两个重载,一个是不带参数的,一个是带参数的,但是即便是带参数的多线程也不支持泛型,这使得使用泛型参数多线程的时候很不方便...
多线程采集C#源代码(转)多线程采集C#源代码(转)
最近用多线程用的比较多自己走了一些弯路,分享出来希望大家少走弯路,C#中的多线程有两个重载,一个是不带参数的,一个是带参数的,但是即便是带参数的多线程也不支持泛型,这使得使用泛型参数多线程的时候很不方便...
Java多线程编程实战指南(核心篇) 高清pdf带目录 随着现代处理器的生产工艺从提升处理器主频频率转向多核化,即在一块芯片上集成多个处理器内核(Core),多核处理器(Multicore Processor)离我们越来越近了――如今...
利用java技术实现多线程文件传输
多线程,高并发.pdf
pdf2word,60行代码实现多线程PDF转Word,python
提到多线程一般都会想到底层C++,估计C#中一般用的比较少吧。这是在网上找得不错的资料,详细介绍了多线程的相关概念。有时用用多线程,能提高运行效率。文章里并就C#里面的Thread类进行了详解。对进程、线程比较...
玩转多线程编程
C# 多线程实例 同时启动多个线程 对线程控制 启动 挂起 停止
批量pdf转高清png图片,支持多文件多线程同时转换,转出支持彩色、黑白与灰度png格式图片 使用方法:双击运行软件,选择要执行程序点击确定,跳出文件夹拾取框选择文件所在文件夹,程序自动转换文件夹下所有pdf文件...
易语言多线程查询源码,多线程查询,查询,UTF8转Unicode,Unicode转Ansi,UTF8解码,系统时间,系统时间到毫秒,API_MultiByteToWideChar,API_WideCharToMultiByte
用VB6折腾了很久,很难实现多文件同时下载,虽然也说VB6支持异步操作,但是不能真正的多个文件同时下载,也就是说实现不了真正意义上的多线程同时工作,用Inet控件观察了好久,总是一个一个的下载。无奈之下,只好...
随着现代处理器的生产工艺从提升...《Java多线程编程实战指南(核心篇)》适合有一定Java语言基础的读者作为入门多线程编程之用,也适合有一定多线程编程经验的读者作为重新梳理知识结构以提升认知层次和参考之用。
1.基于MFC通过多线程实现多个客户端同时连接服务器。 2.服务端通过维护一张转发表来实现对客户端信息的转发,比如客户端A向客户端B发送消息,服务器接收到客户端A发过来消息内容和客户端B信息之后,通过转发表查找到...
线程及多线程的详细讲解 线程控制和周期详细讲解 线程周期及状态转换详细讲解等等。
原版本是pb11.5的,现转成PB9.0,有例子,虽不太完善但却能真正实现多线程,而不是PB本身所实现的共享机制。
根据mysql数据库里图片路径 多线程旋转图片