今日学习
今天将多线程相关的最后几P给看完了,通过并发协作模型(生产者/消费者模式)的解决例子:1.通过管程法 2.通过信号灯法,对于线程通信有了一定的了解。
总结:生产者生产,消费者消费。两条线程之间可以互相通信,否则互不干预。
线程池
线程池的作用:
提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中。
可以避免频繁创建销毁、实现重复利用。类似生活中的交通工具。
使用线程池的好处:
1.提高响应速度(减少了创建新线程的时间)
2.降低资源消耗(重复利用线程池中线程,不需要每次都创建)
3.便于线程管理
如何使用线程池
使用线程池相关API:ExecutorService和Executors
主要方法:
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中的的精髓:反射机制