Day02 Java中级05 Lambda表达式 06多线程

博客介绍了Lambda表达式中引用静态方法和对象方法的写法,还详细阐述多线程相关知识。包括实现多线程的三种方法、常用方法、同步编程模型、线程安全类、死锁问题、线程交互以及线程池的使用等,涉及线程的创建、执行、同步和管理等方面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Lambda表达式

下面中的TestLambda是类名
       引用静态方法  o->TestLambda.testObject(o)   也可以写成  TestLambda::testObject  ;
       引用对象方法    先创建对象;TestLambda testLambda = new TestLambda();
                                                       testLambda::testObject  ;
 

//聚合操作方式遍历
objects
	.stream()
	.filter(o -> o.length > 5 && o.width < 4)
	.forEach(o -> System.out.println(o.name));

//传统遍历
for (Object o : objects) {
   if (o.length > 5 && o.width < 4)
      System.out.println(o.name);
}

多线程

        1.实现多线程的三个方法        

            1. 继承Thread类
            2. 实现Runnable接口
            3. 匿名类的方式
           启动线程用start()方法

        2.常用的方法:
                     Thread.sleep(1000);   //当前线程暂停1S        需要抛出异常 InterruptedException
                     .join();          //比如:把t1线程t1.join()写入主线程中,主线程会等t1结束之后才开始继续往下走       
                     Thread.MAX_PRIORITY
                     Thread.MIN_PRIORITY                //线程优先级,最高10 最低1  默认5
                     Thread.NORM_PRIORITY
                     Thread.yield()              //暂停线程
                     .setDaemon();                 //守护线程
        3.同步编程模型:t1线程和t2线程执行,当t1线程必须等t2线程执行结束之后,t1才开始执行。
                                  引入线程同步机制,虽然会使应用程序使用率降低,但是保证了数据是安全的。
                   多线程的问题,又叫Concurrency 问题
         
        4. 关键字:  synchronized (共享对象){ 把需要同步的代码,放到同步语句块中 }
                                分为对象锁和类锁 
              StringBuffer的方法都是有synchronized修饰的,StringBuffer就叫做线程安全的类
              而StringBuilder就不是线程安全的类

        5.           HashMap不是线程安全的类    HashMap可以存放 null
                      Hashtable是线程安全的类       Hashtable不能存放null
       
        6.       Collections.synchronizedList ();         用该方法可以将非线程安全的集合转换成线程安全的集合 

        7.  死锁   
                            线程1先占用t1,然后想去占用t2 ;而线程2先占用t2,然后想去占用t1。
                     t1,t2都是使用了synchronized。这样就会形成死锁。

        8.    wait、notify和notifyAll   (线程交互)

                            this.wait();               存在于synchronized的语句块中,临时释放,并等待
                            this.notify();             唤醒等待的线程
                            this.notifyAll();         唤醒全部
        9.     线程池
                         线程池类ThreadPoolExecutor   在包java.util.concurrent下

ThreadPoolExecutor threadPool= new ThreadPoolExecutor(10, 15, 60, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());

                  一共五个参数
                         10是初始化10个线程   如果不够用就自动增加最多到15个,






 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值