zoukankan      html  css  js  c++  java
  • Java多线程笔记

    1.并发通常可以提高单处理器上程序的性能

      其实,在单处理器上并发的执行程序锁用的开销大于顺序执行。然而顺序执行时,程序有时会因为某些条件(通常是I/O问题)导致不能继续执行,称为线程阻塞,如果没有并发,程序将停止不前。而使用了并发,一个任务阻塞,其他任务还可以继续执行,这就保证了程序的完成。所以,如果确定没有任务会出现阻塞,在单处理器上并发执行程序是不必要的。

    2.并发在单处理器上性能提高最常见的实例是--事件驱动的编程

      并发最吸引人的额就是可以产生可响应的用户界面,比如某个程序将长期的运行某个操作,但是又要随时处理用户的输入,如果在这个长期任务的每一段都加入一个处理用户输入的程序,那是十分不明智的,而创建单独的线程来处理用户输入就是非常棒的实现

    3.操作系统会隔离进程,但Java却不行,所以,Java多线程最困难的就是协调多个线程对同一块资源的访问,确保资源不会同时被多个线程访问。

    4.四中线程池的区别(newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor 

      new Thread()创建线程这种方式有很多弊端:a.每次new Thread新建对象性能差。b.线程缺乏统一管理,可能无限制新建线程,相互之间竞争,占用过多资源导致死机。c.缺乏更多功能,如定时执行,定期执行,线程中断。

      newCachedThreadPool:创建一个可缓存的线程池,如果线程长度超过处理需要,可灵活的回收空闲线程,若没有可回收的就新建线程(首选)

      newFixedThreadPool:定长线程池,可控制线程的最大并发数,超出的线程按队列等候

      newScheduledThreadPool:定时线程池,支持定时及周期性任务执行

      newSingleThreadExecutor :单一线程池,只会用唯一的线程来执行工作,所有任务按照FIFO来执行

  • 相关阅读:
    关于SQL Server 2005 SP2中提供的Vardecimal存储格式
    .NET平台网络编程之最佳实践 【转载】
    如果类型转换无可避免,那么应该尽可能用as运算符,而不是强制转换
    ArraySegment 的使用 【转载】
    如果不写Order By子句,会怎么样
    ToString 的几个思考
    尽量用属性(Property),而不是字段(Field)
    如何设置SQL Server服务器上面的CPU占用过高的警报
    SQL Server 2008 Replication and Filestream, are both supported together?【转载】
    Microsoft Sync Framework
  • 原文地址:https://www.cnblogs.com/cwjbest/p/6582653.html
Copyright © 2011-2022 走看看