Java旅程 Day06

今日学习

今天将多线程相关的最后几P给看完了,通过并发协作模型(生产者/消费者模式)的解决例子:1.通过管程法 2.通过信号灯法,对于线程通信有了一定的了解。
总结:生产者生产,消费者消费。两条线程之间可以互相通信,否则互不干预。

线程池

线程池的作用:
提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中。
可以避免频繁创建销毁、实现重复利用。类似生活中的交通工具。

使用线程池的好处:
1.提高响应速度(减少了创建新线程的时间)
2.降低资源消耗(重复利用线程池中线程,不需要每次都创建)
3.便于线程管理

如何使用线程池

使用线程池相关API:ExecutorServiceExecutors
主要方法:
void execute(Runnable command):执行任务、命令,没有返回值,一般用来执行Runnable
void shutdown():关闭连接池
Executors:工具类、线程池的工厂类,用于创建并返回不同类型的线程池

线程池使用示例

package com.seawatcher.www.project07;

import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class TestPool {
    public static void main(String[] args) {
        //1.创建服务,创建线程池
        //newFixedThreadPool传入的参数为int型,线程池大小
        ExecutorService executorService = Executors.newFixedThreadPool(10);
        executorService.execute(new MyThread());
        executorService.execute(new MyThread());
        executorService.execute(new MyThread());
        executorService.execute(new MyThread());
        executorService.execute(new MyThread());
        //2.关闭链接
        executorService.shutdown();
    }
}
class MyThread implements Runnable{

    @Override
    public void run() {
            System.out.println(Thread.currentThread().getName());
    }
}

注解和反射

注解(annotation)

注解以@开头,可以被其他程序(比如编译器等)读取。
注解不是程序本身,可以对程序做出解释
并且注解有检查和约束的作用
后面学习到框架的时候会发现项目中全是注解和反射,其中反射是精髓和重点。

内置注解

在这里插入图片描述

元注解

元注解的作用就是负责注解其他注解。
有四个标准的元注解,被提供来对其他annotation类型作说明。

@Target:用于描述注解的使用范围
@Retention:表示需要在什么级别保存该注释信息,用于描述注解的生命周期(SOURCE<CLASS<RUNTIME)
@Documented:说明该注解将会包含在JAVA DOC中
@Inherited:说明子类可以继承父类中的该注解

元注解使用示例:

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)

自定义注解

我们还可以自定义注解,使用@interface来声明
如在方法外可用public @interface 注释名{定义内容}
在方法内则去掉public来声明
自定义注解的使用:

//注解可以显式赋值,如果没有默认值一定要给注解赋值
    @Myannotation3(name = "asd", schools = "大学")
    public void test(){

    }
    @Myannotation4("")//如果只有一个值为value,可以直接省略
    public void test1(){

    }
@interf
ace Myannotation3{
    String name() default "";//注解的参数:参数类型 + 参数名 default后面接默认值
    int age() default 1;
    int id() default -1;
	String value();//如果只有一个参数,建议以value命名
    String[] schools() default {"adw", "dawdss"};
}

总结

今天结束了多线程的学习,进入了注解与反射章节。
即将学习到JAVA中的的精髓:反射机制
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值