咱们在共享咱们的数据的时候必须要考虑到安全的成绩。 但愿你们有所后收获。 咱们能够在计算机上运转各类计算机软件程序。 每个运转的程序可能包括多个独立运转的线程(Thread)。 线程有可能和其余线程共享一些资源, 数据库等。 当多个Java线程同步锁同时读写同一份共享资源的时候, 可能会惹起抵触。 这时候, 咱们需求引入线程“同步”机制, 不能一窝蜂挤上去抢做一团。 同步这个词是从英文synchronize(使同时发生)翻译过来的。 我也不明白为何要用这个很容易惹起曲解的词。 咱们也就只好这么将就。 实际上是“排队”:几个线程之间要排队, 一个一个对共享资源进行操做, 而不是同时进行操做。 需求紧紧记住的第一点是:线程同步就是线程排队。 同步就是排队。 线程同步的目的就是避免线程“同步”执行。 关于线程同步, 需求紧紧记住的第二点是“共享”这两个字。 只要共享资源的读写访问才需求同步。 需求紧紧记住的第三点是, 这样的状况下, 线程之间就需求同步。 关于线程同步, 只需这些线程的代码访问同一份可变的共享资源, 这些线程之间就需求同步。 上面举几个例子。 有两个推销员, 写报告。 他们可能买到异样种类的样品, 他们之间没有任何共享资源。 因此, 他们能够各自进行本身的任务, 这两个推销员就至关于两个Java线程同步锁;两个推销员遵循相同的任务步骤, 上面给这两个推销员添加一个任务步骤。 推销员需求根据公司的“公告栏”上面发布的信息, 安排本身的任务计划。 这一点成绩都没有。 这两个推销员谁都不会去修改公告栏上写的信息。 上面添加一个角色。 一个办公室行政人员这个时候, 也走到了公告栏前面, 预备修改公告栏上的信息。 两个推销员这个时候, 这两个推销员就必须等待行政人员完成修改以后, 才能观看修改后的信息。 若是行政人员抵达的时候, 两个推销员已经在观看公告栏了。 那么行政人员需求等待两个推销员把之后信息记录下来以后, 才能够写上新的信息。 上述这两种状况, 由于其中一个线程(行政人员)修改了共享资源(公告栏)。 并且咱们能够看到, 行政人员的任务流程和推销员的任务流程(执行代码)彻底不一样, 因此他们之间需求同步。 线程同步的基本完成思路仍是比较容易理解的。 咱们能够给共享资源加一把锁, 这把锁只要一把钥匙。 生活中, 每一个储物箱都有一把锁, 一把钥匙。 人们能够运用那些带有钥匙的储物箱, 把储物箱锁上, 而后把钥匙拿走。 该储物箱就被锁住了, 真实的储物箱钥匙是能够被人拿走复制的, 因此不要把贵重物品放在超市的储物箱里面。 因而不少超市都采用了电子密码锁。 还有一个严峻的成绩没有处理, 这个同步锁应该加在哪里?数据库