java 多线程学习笔记4-线程组 线程池 适配器

1、多线程-线程组:
    Java中使用ThreadGroup来表示线程组,它可以对一批线程进行分类管理,Java允许程序直接对线程组进行控制。
    默认情况下,所有的线程都属于主线程组。
    
    public final ThreadGroup getThreadGroup()//通过线程对象获取他所属于的组,在Thread类的源码可以查到
    public final String getName()//通过线程组对象获取他组的名字
    
    例如:
        Thread t1 = new Thread(mr, "线程名称1");//mr是一个实现了Runnable接口的一个类(在这就不写了)
        ThreadGroup tg1 = t1.getThreadGroup();
        String name = tg1.getName())
        
    线程默认情况下属于main线程组
    
    
    
    自己设定线程组
// ThreadGroup(String name)
ThreadGroup tg = new ThreadGroup("这是一个新的组");


MyRunnable mr = new MyRunnable();
// Thread(ThreadGroup group, Runnable target, String name)
Thread t1 = new Thread(tg, mr, "张三");
Thread t2 = new Thread(tg, mr, "李四");

System.out.println(t1.getThreadGroup().getName());
System.out.println(t2.getThreadGroup().getName());

//通过组名称设置后台线程,表示该组的线程都是后台线程(可以对线程组进行操作)
tg.setDaemon(true);
        
        
2、多线程-线程的五种状态
    新建,就绪,运行,阻塞,死亡
        
3、多线程-线程池:
    程序启动一个新线程成本是比较高的,因为它涉及到要与操作系统进行交互。而使用线程池可以很好的提高性能,尤其是当程序中要创建大量生存期很短的线程时,更应该考虑使用线程池。线程池里的每一个线程代码结束后,并不会死亡,而是再次回到线程池中成为空闲状态,等待下一个对象来使用。在JDK5之前,我们必须手动实现自己的线程池,从JDK5开始,Java内置支持线程池
    
    
    public static ExecutorService newFixedThreadPool(int nThreads) //里面放n条线程
public static ExecutorService newSingleThreadExecutor()//里面只放1条线程
这些方法的返回值是ExecutorService对象,该对象表示一个线程池,可以执行Runnable对象或者Callable对象代表的线程。它提供了如下方法
    
    例如:
    public static void main(String[] args) {
ExecutorService pool = Executors.newFixedThreadPool(2);//创建线程池
pool.submit(new MyRunnable());//将线程放进池子里并执行
pool.submit(new MyRunnable());

pool.shutdown();//关闭线程池
        }
    
4、适配器:
    a.什么是适配器
        在使用监听器的时候, 需要定义一个类事件监听器接口.
        通常接口中有多个方法, 而程序中不一定所有的都用到, 但又必须重写, 这很繁琐.
        适配器简化了这些操作, 我们定义监听器时只要继承适配器, 然后重写需要的方法即可.
        
    b.适配器原理
        适配器就是一个类, 实现了监听器接口, 所有抽象方法都重写了, 但是方法全是空的.
        适配器类为什么需要定义成抽象的?因为创建该类对象,调用空方法是没有意义的
        目的就是为了简化程序员的操作, 定义监听器时继承适配器, 只重写需要的方法就可以了.


    例如:
        //定义一个接口,里面定义了很多的方法
        interface 和尚 {
            public void 打坐();
            public void 念经();
            public void 撞钟();
            public void 习武();
        }


        abstract class 天罡星 implements 和尚 { //声明成抽象的原因是,不想让其他类创建本类对象,因为创建也没有意义,方法都是空的


            @Override
            public void 打坐() {
            }


            @Override
            public void 念经() {
            }


            @Override
            public void 撞钟() {
            }


            @Override
            public void 习武() {
            }
            
        }


        class 鲁智深 extends 天罡星 {
            public void 习武() {
                System.out.println("倒拔垂杨柳");
                System.out.println("......");
            }
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值