zoukankan      html  css  js  c++  java
  • run()和start()调用问题简记

    直接看个例子:
    public class HelloSogou{
      public static synchronized void main(String[] a){
        Thread t=new Thread(){

          public void run(){

            Sogou();

          }

        };
      ①t.run();//②t.start()
      System.out.print("Hello");
      }
      static synchronized void Sogou(){
      System.out.print("Sogou");
      }
    }
    两处不一样的区别:
    ①处:调用run时只是单纯执行方法,故按代码顺序执行下来结果就是SogouHello。
    ②处:首先调用start()是开始了一个线程,那么现在程序中有了两个线程主线程main和线程t;这就涉及到:函数使用的锁是this(即对象本身),还是:若函数被static修饰则锁为类名.class。那么题目中两个函数都是使用了同一个锁即HelloSogou.class,当执行t.start()时,t线程准备调用Sogou方法,但是锁对象已被主线程占用,故要等待主线程执行完System.out.print("Hello")后释放锁才可以执行自己的Sogou方法。故此结果是HelloSogou

  • 相关阅读:
    PCA与LDA
    SVM--交叉验证
    git的基本使用
    MySQL的操作
    MySQL安装和远程连接
    javaScript进阶
    javaScript基础入门篇
    javaScript运动
    可变对象和不可变对象
    基本数据类型
  • 原文地址:https://www.cnblogs.com/yangrongkuan/p/12023843.html
Copyright © 2011-2022 走看看