java中的线程

来源:互联网 发布:剑灵忽雷捏脸数据 编辑:程序博客网 时间:2024/06/08 15:27

1.继承Thread类,2,实现Runnable接口, 或者Callable接口,实现接口的好处是,多个线程可以共同完成一个接口实例。同一个targe;非常适合多个线程来处理同一个份资源。

2。不要直接运行线程的run方法。这样做还是单线程。不是多线程,而且,此时的现成已经不处于新建状态,不能用start()方法来让线程处于就绪状态。 会报出异常。

3.线程的状态, 新建--》就绪--》运行--》阻塞--》死亡。

4,线程阻塞的时机:1,sleep()主动放弃机会,让其他线程占用,2,遇到阻塞式IO,3,获取一个同步监视器。4.等待一个通知,5.挂起(suspend,resume());

5.yield()或者是去时间片,就会从运行状态变回就绪状态。 调用stop,异常,执行完,都会从运行状态变回死亡状态。

6.isAlive()方法来测试线程是否处于运行状态。新建状态跟死亡状态返回 false, 就绪,阻塞,运行状态, 属于 true;

7.不要对一个死亡的线程调用 start();方法。将会引发, IllegalThreadStateException

8.join方法,调用线程必须等待被调用的线程执行完成后,才能执行。

9.后台线程, setDaemon(true) 可以将线程设置为后台线程。当前台所有的线程都结束时,后台线程自动结束。

10。调用sleep方法要处理异常。

11.setPriority设置优先级。10个优先级,但是操作系统未必支持。还是用系统定义的常量来设置。

12.synchronized(0bj){方法体} 加锁--》修改--》释放。。 临界资源。

13.如果一个类中有个方法用synchronized修饰,对于同一对象而言,任何时候只能有一个线程对这个对象加锁。

14. 对于可变类来说,应该提供2个类,一个是单线程,一个是多线程版本,如stringBuffer多线程,stringBuilderd单线程。

15.在什么时候线程释放锁,1.执行完或遇见error。2,调用wait()方法。 如果调用了sleep,yield,suspend,resume.方法,都不会放弃锁。

16.同步方法容易造成死锁,比如A对象加锁,调用B对象的方法。B对象也加锁,调用了A的方法。

17.Lock比同步方法或同步代码块更强大。有很多方法。不止是同步代码块与同步方法。

18.线程间的通信,wait();notify(); notifyall(); 使用了wait();线程释放了同步锁,然后进入阻塞状态,只有用notify();或者 notifyAll():才能唤醒。

19.如果使用了隐式的同步监视器,synchonized方法或方法块。 一个是对象本身,一个是对象。才可以使用wait()与 Notify

20.lock锁可以使用condition来通信。

21. lock lock.newCondition();

22.lock.lock(); lock.unlock(); cond.await(); cond.signalAll(); 

23.使用阻塞队列控制线程通信。 

put,阻塞,offer false, add() 异常,  take(); 阻塞, remove();异常,poll() ;false;

BlockingQueue;阻塞队列。

24.java中可以把大任务分成多个小人物在不同的CPU上执行。


0 0
原创粉丝点击