什么时候用多线程?
怎么用多线程?
某个类内有一个动作在使用的时候会被多次调用,如一个银行需要执行多个转账动作,那么我们可以把这个动作的调用过程写在一个线程类里面,在这个线程类里面调用方法、执行动作,
一个银行对象,有时候需要并发执行多个转账动作,这个被多次执行的动作的执行就可以写在一个线程类里面,这样线程被调用的时候就是去执行这个转账动作,从而实现并发。这个银行维护了一系列的数据资源,多个线程并发访问这些数据的时候会出现竞争条件,为了维护线程安全,为这个银行对象添加一个线程锁,实际上就是对这个银行对象维护的数据资源进行锁定,(所以,锁是属于维护数据资源的类对象的,而不是属于某个线程的,需要在线程类之外定义)
类的每个对象都有一个锁对象,
一个锁对象对应多个条件对象,考虑下,一个锁对象锁住的是这个程序进程内的资源,一个条件对象对应了一个让某个线程释放锁的条件,一个锁锁住资源后,那么可以让这个资源被释放的条件是有很多种的,这样可以理解为什么一个锁对象可以对应多个条件对象。
条件对象与锁对象一样,同样不是属于某个线程的,所以条件对象的定义也是在线程类之外的,同时由于使用条件对象暂停线程和唤醒其他线程都是某个线程的动作,所以条件对象的使用是在线程内的。件对象调用await()暂停线程和调用singalAll()唤醒其他线程都是在线程之内完成的