正确结果的获得依赖于不同线程之间的相对速度,这就是竞争条件,一个错误的做法;
轮询是一个基本的方法:直到要求副线程返回的数据有了符合条件的值,处理线程才去处理;
回掉是一个改进的方法:副线程通知主线程:我已经将所需要返回的数据返回了;
很显然,轮询总是招人烦,一个老师老是问每个学生:你他吗的作业写完了没有?
回掉就很好接受,当一个学生完成作业的时候去主动告诉老师:您可以批阅我的作业了;
回掉的一个思想就是:主线程中的方法不一定要主线程来调用,回掉就是副线程调用主线程的一个
方法完成处理,所以回掉的方法甚至不需要老师批阅,只是学生借用了老师的红色钢笔自己批阅
完事;
同步
同步仅仅是对象上的局部锁定,如果其他方法比较隐蔽地使用对象,而不企图在此对象上同步,则也可以使用同步对象;也就是说Java没有提供方法来阻止所有其他线程使用一个
共享资源,它只能阻止在同一对象上同步的其他线程使用这个共享资源;这就是我们以前得出的结论:“如果你的多个线程使用了不同的同步块或者同步方法来达到临界区的