做了一个跟多线程相关的oj。遇到几个问题如下:
1 同一个线程不能多次start(),否则出发异常,如果需要多次启动start(),把继承thread改成调用runnable接口,然后把thread.start()写成new thread(thread).start()
2 启用多线程时,线程不ing不是严格意义上的同时执行的,实际上cpu处理线程的时候并不是真正的同时进行,而是执行某个线程一段时间,然后在执行其他线程一段时间,一直这样循环下去,执行顺序和线程的优先级有关系,在线程优先级都相同的情况下,执行权是随机分配的,一般情况下多线程并发访问数据的时候,要做同步处理,避免数据出现紊乱。
比如同步机制可以使用synchronized关键字实现。
java每个对象都有一个锁,或者是监视器,当用synchronized修饰一个方法时,一个对象进入这个方法后,其他线程对象就不能再访问这个synchronized方法,直到锁释放。
一种是用synchronized关键字修饰方法,一种是锁代码块
public synchronized method(){}
另一种
Object obj = new Object();
public void method(){
synchronized (obj){
.......
}
}
我在oj中使用的是对对象锁代码块
这是我遇到的关于线程的问题,我在网上看懂一些关于多线程的博文,很好,但是还有些问题喔在实际中还没遇到,暂时就不总结了。
还有种同步处理,就是sleep线程,还有
博文地址:http://www.cnblogs.com/mengdd/archive/2013/02/16/2913806.html