并发编程是为了让程序运行得更快,可是并非启动更多的线程就能让程序最大限度的并发执行,一般在并发编程中会遇到下面的问题.java
CPU经过时间片非配算法来循环执行任务,当前任务执行一个时间片后会切换到下一个任务.在切换时会保存上一个任务的状态,以便这个任务再次执行时,能够在加载这个任务的状态.因此任务从保存到再加载的过程就是一次上下文切换.git
测试多线程是否必定比单线程快 执行连接中的代码发现,当并发操做较少时,并发执行的速度比串行慢,由于并发执行时,线程有建立和上下文切换的开销.算法
形成死锁的代码 连接中的代码会形成死锁,代码中thread1和thread2互相等待对方释放锁.避免死锁的方法以下:数据库
程序的运行速度受限于计算机的硬件或软件资源.硬件限制有带宽的上传/下载速度,硬盘读写和CPU的处理速度;软件限制有数据库的链接数和socket的链接数等.
为了解决资源限制,硬件能够换设备,采用集群并发执行程序;
软件限制可使用链接池将数据库和socket链接复用.编程