首页 > 学院 > 开发设计 > 正文

初识多线程

2019-11-06 06:16:06
字体:
来源:转载
供稿:网友

0. 资源限制有哪些?

硬件限制:带宽、硬盘读写速度、CPU的处理速度。 软件限制数据库的连接数、socket的连接数等等。 应对策略:对于硬件限制,考虑集群并行执行程序,如Hadoop、服务器集群,不同机器处理不同数据。可以通过“数据ID%机器数”,计算得到一个机器的编号,然后由对应编号的机器处理这笔数据。对于软件限制,可以使用连接池和socket复用等管理连接数

1. 为啥要用多线程?

多线程是为了利用现有资源让程序运行得更快

2. 线程越多越快吗?

不是,因为多线程创建、上下文切换会影响执行速度。每个线程都有自己的Stack,java在64位系统默认Stack大小是1024KB

3.如何减少线程的创建?

利用线程池

4.如何减少上下文切换?

A、多线程竞争锁时,会引起上下文切换,可以采用三种方式避免锁的使用: ThreadLocal:单个线程独享数据 无锁并发编程:如将数据的ID按照Hash算法取模分段,不同线程处理不同段的数据 CAS算法:Java的Atomic包使用CAS算法来更新数据,而不需要加锁 B、根据硬件配置和任务量创建适量线程 C、协程(coroutine):在单线程里实现多个任务的调度,并在单线程里维持多个任务间的切换

5.观察线程状态命令

jstack pid > /home/dump20170307 grep /home/dump20170307 | awk ‘{PRint 2345}’ | sort | uniq -c

6.线程的几种状态

注意Runnable被包含到Running中

线程状态

7.死锁

线程间互相等待彼此持有的锁会产生死锁,通过jstack可以方便排查 避免一个线程中同时获取多个锁 避免一个线程的锁内同时占有多个资源 尝试使用定时锁tryLock(timeout)


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表