zoukankan      html  css  js  c++  java
  • 《head first java 》读书笔记(三)

    Updated 2014/04/03 --P518

    Thread需要任务,任务是实现过Runnable的实例。Runnalbe这个接口只有一个方法。run()会是新线程所执行的第一项方法。要把Runnable传给Thread的构造函数才能启动新的线程。线程在初始化以后start()以前处于新建立的状态。调用Thread对象的start()之后,会建立出新的执行空间,它处于可执行状态等待被挑出来执行。当Java虚拟机的调度器选择某个线程之后它就处于执行中的状态,单处理器的机器智能有一个执行中的线程。有时线程会因为某些原因而被堵塞。调度不能保证任何的执行时间和顺序,所以你不能期待它会完全地平均分配执行,你最多也只能影响sleep的最小保证时间。

    synchronized关键词代表线程需要一把钥匙来存取被同步化过的线程。

    要保护数据,就把作用在数据上的方法给同步化。

    Thread.sleep()这个静态方法可以强制线程进入等待状态到过了设定时间为止。sleep()方法可能会抛出InterruptedException异常,所以要包在try/catch块,或者把它声明出来。可以用setName()方法来帮线程命名,通常用来除错。两个或两个以上的线程存取相同的对象可能会引发数据的损毁。要让对象在线程上有足够的安全性,就要判断出哪些指令不能被分割执行。使用synchronized这个关键词修饰符可以防止两个线程同时进入同一对象的统一方法。每个对象都有单一的锁,单一的钥匙,这只会在对象带有同步化方法时才有实际的用途。线程尝试要进入同步化过的方法时必须要取得对象的钥匙,如果因为已经被别的线程拿走了,就得等。对象就算是有多个同步化过的方法,也还是只有一个锁。一旦某个线程进入该对象的同步化方法,其他线程就无法进入该对象上的任何同步化线程。

  • 相关阅读:
    关于Linux静态库和动态库的分析
    某个表格不知道被哪个Session 锁住了,及如何解锁
    如何降低索引的clustering_factor
    Oracle Logminer 查找日志信息
    使用“alter index ××× monitoring usage;”语句监控索引使用与否(转载secooler) 转
    Oracle提高查询效率的解析
    数据库flash_recovery_area满导致数据库启动报错ORA03113错误
    ora错误代码汇总
    Oracle BBED 工具介绍
    oracle BBED 直接修改数据库block块
  • 原文地址:https://www.cnblogs.com/pandy/p/3643556.html
Copyright © 2011-2022 走看看