Thread与并发编程
来源:互联网 发布:手机自动打开数据网络 编辑:程序博客网 时间:2024/05/22 13:52
Java线程
最近两周一直做前端,做的很烦躁,也就没有心力静下心来思考技术,人比较浮躁,很焦虑。
3周前,老系统出了一次fullgc,我无从查起,于是在ata上搜索相关文章,发现了dump内存,以前虽然简单使用过,但是用起来不顺,于是就理了理。
jps jmap出内存snapshot快照,顺便用eclipse的mat工具看了看。
jstack用例dump线程堆栈。可以排查死锁等问题,也可以查看线程调用堆栈。查看jstack日志,不太懂。
线程状态(有一个状态机)
线程之间数据交互:ThreadLocl
线程之间等待消息:wait()/notify()、notifyAll()
线程之间资源竞争:synchoried/lock
线程的属性:deamod(后台线程)、priority(优先级)、
线程让步:yield()
线程睡眠:sleep()
线程join: jion()
runnable
ThreadLocal
ThreadGroup
callable
ExcuteService
…
以上是基础,于是又了后来java6/7/8提供的不同的多线程提供的工具。
Tomcat连接器
之前看tomcat的源码时,对连接器比较在意,这让我认识到socket、serverSocket,我以为我理解了网络连接。
我一直心中有个疑惑:socketServer只能监听机器上的一个端口,如何来实现多线程呢?百思不得其解,也就暂时放下了。
今天看了一下i/o的5种模型,又绕回了原来的问题。
终于明白了,bio/nio/aio的区别。
对应代码这边就是Socket s = serverSocket.accept();serverSocket可以保存一个链接队列,accept可以去到一个连接进行处理,socket的输入输出io是阻塞的,一直等着io读取完数据,阻塞一个用户线程。
nio的selector可以管理多个channel,从ChannelServerSocket可以获取SocketChannel,然后注册到selector,然后没有selectionKey就有多种状态:OPEN_ACCEPT,OPEN_READ,判断为OPEN_READ(可读)才去处理
这又引出了reator模式,和他对应的有processor模式(未研究)。
于是打通了net/io/nio/thread的任督二脉。
参考
Tomcat性能调校之连接器模块JIO、APR和NIO
BIO与NIO、AIO的区别(这个容易理解)
Java I/O模型从BIO到NIO和Reactor模式
Reactor模式详解
- Thread与并发编程
- Java并发编程--Thread
- Java并发编程理论与实践——Thread
- boost::thread库 并发编程
- thread接口,java并发编程
- java并发编程—— 七 Thread理解与死锁分析(哲学家进餐演示)
- Java并发编程--Thread中start()与run()方法的区别概要
- Java并发编程:Thread类的使用
- JAVA并发编程--守护线程(Damon Thread)
- Java并发编程:Thread类的使用
- Java并发编程:Thread类的使用
- Java并发编程:Thread类的使用
- Java并发编程:Thread类的使用
- Java并发编程:Thread类的使用
- Java并发编程:Thread类的使用
- 【Java并发编程】深入分析Thread(七)
- Java并发编程:Thread类的使用
- Java并发编程:Thread类的使用
- git操作记录
- jqGrid 学习
- Android5.0之Activity的转场动画
- MySQL 不常用命令记录
- SpringMVC---实现文件上传与下载
- Thread与并发编程
- ratingbar的使用技巧(坑)
- C# 如何关联键盘按钮 (KeyChar/KeyCode值 KeyPress/KeyDown事件 区别)
- 手机插到电脑上后adb查不到连接(只教你最后一招)
- spring注解
- 数据库并发机制和事务的隔离级别详解
- windows下命令行计算文件hash值
- 说说mycat的排序机制bug
- ip地址转换(通过ip地址以及掩码获取广播地址)