A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© waterfox 中级黑马   /  2015-3-10 13:16  /  1307 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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线程和子线程获得资源的概率是相同的,那么子进程也可以抢主进程的资源。(原本我认为子进程是不能抢主进程的资源的)


纯属个人理解,有不妥的地方,随时和我讨论
   
   

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马