摘要:
1、为什么要使用缓存由于服务器、数据库、网络等资源有限,无法支撑越来越多的请求与计算量,所以将一部分数据放在缓存中,以此减小薄弱环节的计算量和请求流程。网站中缓存的应用场景: 1:可以缓存整个页面的html,提高访问响应能力; 2:针对局部页面元素进行缓存; 3:对复杂数据的结果进行缓存,例如一个查询需要结合多个数据集,然后根据这些数据集进行相应的运算,即... 阅读全文
摘要:
线程的协调运行有一个经典案例,即生产者和消费者问题。 假设有一个货架,生产者往货架上放货物,消费者从货架上取货物。 为了方便讲解,制定一个规则,生产者每放上一个货物,消费者就得取走一个货物。不允许连续放两次,也不允许连续取两次。 为了实现这个功能,可以使用wait()、notify()和notify 阅读全文
摘要:
关于线程安全问题,有一个经典案例:银行取钱问题。 假设有一个账户,有两个线程从账户里取钱,如果余额大于取钱金额,则取钱成功,反之则失败。 下面来看下线程不安全的程序会出什么问题。 这个结果显然是不对的,当余额小于取钱金额时,程序应该取钱失败,而不是把余额变成负数。之所以会出现这种情况,是因为当线程T 阅读全文
摘要:
线程的生命周期如下图: 当程序使用new关键字创建一个线程之后,线程就处于新建状态了。此时线程只是被分配了内存资源,初始化了成员变量。 当线程对象被调用了start()方法之后,该线程就处于就绪状态了。表示这个线程可以运行但还没有运行,至于线程何时开始运行,取决于jvm的线程调度器。 有一点值得注意 阅读全文
摘要:
现在几乎所有操作系统都支持多任务,通常一个任务就是一个程序,一个运行中的程序就是一个进程。当一个程序行时,其内部也可能在执行多个任务,进程内每一个任务的执行流,就是一个线程。 所以线程也被称作轻量级进程。 总而言之,线程是进程的组成部分,可以独立、并发的执行任务。 Java中有两种方式来创建和启动线 阅读全文