A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 飘影 中级黑马   /  2015-6-28 20:23  /  155 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  • 线程组:默认情况下是main线程组
    getThreadGroup()获得线程组
    Thread.currentThread().getThreadGroup().getName();返回线程组的名字。
  • 改变线程组
    首先创建一个线程组:ThreadGroup tg=new ThreadGroup("这是一个新的线程组");
    然后Thread t1=new Thread(tg,Myrunnale,"线程名");
  • 通过线程组名称设置后台线程,tg.setDaemon()   设置守护线程。等等
    线程组主要是对线程统一管理。
  • 同步还可以在类里,把相应的方法设置成synchronized           注意方法里面的锁的对象是this
  • 线程池:程序启动一个新线程成本是比较高的,因为它涉及到要与操作系统进行交互,二使用线程池可以很好的提高性能,尤其是当程序中要创建大量生存周期很短的线程时,更应该考虑使用线程池。
  • 线程池每个线程结束后不会销毁,而是回到线程池变成空闲状态。
  • newCachedThreadPool()
              创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。
  • newFixedThreadPool(int nThreads)
              创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程。

  • newSingleThreadExecutor()
              创建一个使用单个 worker 线程的 Executor,以无界队列方式来运行该线程。

  • A:创建一个线程池对象,控制要创建几个线程对象
    ExecutorServoce newFixedThreadPool(int nThread)
    B:这种线程池的线程可以执行:
        可以执行Runnable对象或者CallAble对象代表的线程
        做一个实现Runnable接口
    C:调用如下方法即可:
        Future<?> submit(Runnable task)
        <T> Future<T> submit(Callable<T> task)
  • newFixedThreadPool静态函数,直接调用
    1. ExecutorService pool=Executors.newFixedThreadPool(2);
    2. pool.submit(new MyRunnable);
    复制代码

  • 结束线程池:pool.shutdown();
  • 创建多线程方式3:
    Callable是个接口   这个线程有返回接口,但是runnable没有返回结果。  跟 Runnable用法相似
    他是通过线程池来创建线程。  这个不常见
  • Future 表示submit异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并获取计算的结果。计算完成后只能使用 get 方法来获取结果,如有必要,计算完成前可以阻塞此方法。取消则由 cancel 方法来执行。                    麻烦,一般不用。
  • 匿名内部类使用多线程“
    1. //集成Thread类来实现多线程
    2.         new Thread(){
    3.             public void run() {
    4.                 for (int i = 0; i < 100; i++) {
    5.                     System.out.println(Thread.currentThread().getName()+":"+i);
    6.                 }
    7.             };
    8.         }.start();
    9.         //用Runnable接口实现
    10.         new Thread(new Runnable() {

    11.             @Override
    12.             public void run() {
    13.                 // TODO Auto-generated method stub
    14.                 for (int i = 0; i < 100; i++) {
    15.                     System.out.println(Thread.currentThread().getName()+":"+i);
    16.                 }
    17.             }
    18.         }){}.start();
    复制代码


  • 但是对于,走的是子类的,即会输出world,不会输出hello
    1. new Thread(new Runnable() {

    2.     @Override
    3.     public void run() {
    4.         // TODO Auto-generated method stub
    5.         for (int i = 0; i < 100; i++) {
    6.             System.out.println("hello"+":"+i);
    7.         }
    8.     }
    9. }){
    10.     public void run() {
    11.         for (int i = 0; i < 100; i++) {
    12.             System.out.println("world"+":"+i);
    13.         }
    14.     };
    15. }.start();
    复制代码




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马