Java 多线程整理

来源:互联网 发布:php滚动加载 编辑:程序博客网 时间:2024/06/05 05:53

  本文主要写的是Java中线程安全相关的问题,仅仅能作为面试时参考级别或理解一些概念。

主要原因如下:

  1)并发“具有可论证性的确定性,但实际上具有不确定性。”  ——Java编程思想。

  2)涉及多线程编程时只投入一个人是危险的。

面试官经常问的一个问题:

  HashTable和HashSet区别是什么?                      答:HashTable线程安全类,HashSet线程不安全。

  要想HashSet在多线程下安全使用该如何?     答:通过java.util.Collections类的synchronizedSet()方法返回线程安全的Set。

如果项目使用的是JDK1.5+的话根据下面的内容回答会更好,

  Java5新追加了执行器Executor,用来管理Thread对象。以下是Executor简单应用。

      //  有多中Executor,SingleThreadExecutor

      ExecutorService exec = Executors.newCachedThreadPool();

     //  执行一个

     exec.execute(new Runnable());

     //  此executor不再接受线程开启命令
     executor.shutdown();
  Java5新追加的集合类ConcurrentHashMap,是在多线程下首选的Map,List,Set的高效版本应该也有,可以参考Java编程思想。

  ThreadLocal: 线程本地变量,参考 http://javapapers.com/core-java/threadlocal/ (博主长相是印度人,他的文章很不错)

  其他和线程安全相关的类:

      StringBuffer,StringBuilder。他们都继承与同一个类,StringBuffer方法都做了同步。

      Log4J核心是通过一个HashTable管理的,估是线程安全的。

关于同步方法:

  Java运行时一些数据是多个线程共享的,其中堆和方法区是共享的,Java需要2种多线程访问数据进行协调:   
        保存在堆中的实例变量。   
        保存在方法区中的实例变量。   
  程序不需要协调保存在Java栈中的局部变量。 

  同步方法或同步代码块区别参考第一条 http://www.ibm.com/developerworks/cn/java/j-5things15/index.html?ca=drs-

 

  WEB环境(SSH)下多线程

     Struts2每一次请求

     DAO单例:(Tomcat要求这么做)

最后附上当启动Tomcat时的JDK线程图,至于里面线程具体信息我也不清楚,希望各位指教。

 

原创粉丝点击