阅读笔记

(在极客时间买了几个专栏,得抓紧读完)/*我是小白,写的一般,大佬就不用看了*/

一、java线程的生命周期

1.线程五态:初始状态,就绪状态,运行状态,休眠状态和终止状态。

      在初始状态,创建的线程通常只是在编程语言层面被创建,在os层面还未被创建。

     在就绪态,指线程可以分配cpu执行。此时os层面的线程被创建。

     当有cpu空闲,分配到cpu的就绪态的线程就转为运行态

      运行态的线程若调用阻塞API或等待某个实践,该线程转为休眠态,同时释放cpu使用权休眠态的线程无法获得cpu使用去权,只有等待的事件出现,该线程会从休眠态转为可运行态。

      线程执行完毕或者出现异常就会进入终止状态,终止状态的线程不会切换到任何状态,意味着线程生命周期结束。

2.Java的线程

new(初始化)

runnable(可运行/运行态)

 

blocked(阻塞态)

waiting(无时限等待)

timed_waiting(有时限等待)

上面这三个在os层面相当与一个休眠态。只要java线程处于这三种之一,此线程永远没cpu的使用权。

treminated(终止状态)

---------(

————————————————————————————————————————————————————————

下面代码的本意是当前线程被中断之后,退出

while(true),你觉得这段代码是否正确呢?

Thread th = Thread.currentThread();
while(true) {
  if(th.isInterrupted()) {
    break;
  }
  // 省略业务代码无数
  try {
    Thread.sleep(100);
  }catch (InterruptedException e){
    e.printStackTrace();
  }
}

/*  可能出现无限循环,线程在sleep期间被打断了,抛出一个InterruptedException异常,try catch捕捉此异常,应该重置一下中断标示,因为抛出异常后,中断标示会自动清除掉!

 不能中断循环,异常捕获要放在while循环外面  */

为什么当程序运行一段时候后,才抛出InterruptedException?

异常是果不是因,你让它抛它就抛

————————————————————————————————————————————————————————————————————————————————————————————————————————————————

二、如何写出安全的java代码

(安全是个比较大的话题,这里只从程序层面和dos攻击说起。)

先来看个简单的代码

//a,b,c都是int型

if(a+b>c){...}

      作为小白来看这只不过是个简单的条件判断语句。但是此处的隐患是数值类型需要注意溢出。看似不起眼,却可能带来逻辑错误,还可能导致严重的安全漏洞。

在java中这个问题处理相对完善。但程序可能调用本地代码,错误的数值可能导致c/c++层的数据越界等问题。

可以改进为:   if(a<c-b)

(那个c是负数,b是正数,c-b也可能溢出)

      再来看个例子

try {
// 业务代码
} catch (Exception e) {
throw new RuntimeException(hostname + port + “ doesn’t response”);
}
     作为渣渣的我,看起来不过是很普通的异常处理操作。

这段代码将敏感信息(hostname)含在异常消息中,试想,如果是一个Web应用,异常也没有良好的包装

很有可能就把内部信息暴露给终端客户。

尽量少暴露信息,也是保证安全的基本原则之一。即使我们并不认为某个信息有安全风险,我的建议也是如果没有必要,不要暴露出来。

攻击和防守是不对称的,只要有一个严重漏洞,对于攻击者就足够了

所以,不能对黑盒形式的部署心存侥幸,这并不能保证系统的安全,攻击者可以利用对软件设计的猜测,结合一系列手段,探测出漏洞。

————————————————————————————————————————————————

以上内容学习自极客时间版权所有: https://time.geekbang.org/column/article/11355

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值