本帖最后由 waterfox 于 2015-3-10 13:16 编辑
学习到多线程时,想验证线程之间的优先级,所以写下下面的代码
思路:创建main线程的两个循环,两个子线程,分别判断他们的执行优先权
public class Volate implements Runnable{
private int num=0;
public void run() {
for (int i=0;i<50;i++){
try {
Thread.sleep(10);
} catch (Exception e) {
e.printStackTrace();
}
synchronized (this) {
//输出当前线程的名称和num值,每次循环后增加1。并且同步num的值
System.out.println(Thread.currentThread().getName()+"\t"+num++);
}
}
}
public static void main(String[] args) {
//----------Thread多线程-------------------
Volate vol=new Volate();
Thread thr=new Thread(vol);
thr.start();
Thread thr1=new Thread(vol);
thr1.start();
//让thr线程处于较高优先级
try {
thr.join();
} catch (Exception e) {
e.printStackTrace();
}
//----------------单线程main的循环---------------------------
for (int i=0;i<=5;i++){
System.out.println(Thread.currentThread().getName()+"\t"+i);
}
for (int i=0;i<=5;i++){
System.out.println(Thread.currentThread().getName()+"1\t"+i);
}
}
}
结论:
1.main单线程里的执行顺序,是按从上到下执行完代码块后再执行下一个代码块
2.新建的子线程的执行顺序,是根据priority优先级,默认是相同的,也就是说新建的线程默认是会互相抢资源的。子线程如果有同步对象,需要synchroized或者lock实现锁的释放,才不会互相抢资源。
3.main线程和新建的子线程,如果没有特殊设置优先级,默认是相同的,也就是说,main线程和子线程获得资源的概率是相同的,那么子进程也可以抢主进程的资源。(原本我认为子进程是不能抢主进程的资源的)
纯属个人理解,有不妥的地方,随时和我讨论
|
|