高并发与多线程网络学习笔记(小技巧)

创建多个线程

Stream.of("f1","f2").foreach(n->new Thread().start());

线程休眠

TimeUnit.Second.sleep()//好过Thread.sleep(),可控时间级别增强可读性

程序中断之后主动调用的钩子函数

可以用于程序中断后释放资源

//Runtime.getRuntime(),可以获取到CPU等本机信息
Runtime.getRuntime().addShutdownHook(new Thread(){})

线程捕获run方法异常

线程自己本身无法抛出异常,所以有一些runtimeException无法捕获,如2/0

thread.setUnCaughtExceptionHandler(接口)

获取线程运行堆栈,查看调用逻辑

  • 日志可以这样做,一般不常用
  • 以方法为基本单位,返回当前方法的调用堆栈信息
Arrays.stream(Thread.currentThread().getStackTrace()).filter(e->!e.isNativeMethod()).forEach(
                e-> System.out.println(e.getClassName()+":"+e.getMethodName()+":"+e.getLineNumber())

跳出多重循环

Outer:
while(true){
    while(true){
        break Outer;//就可以跳出循环到Outer的位置
    }
}
posted @ 2021-01-17 14:59  王者之剑KO  阅读(82)  评论(0)    收藏  举报