zoukankan      html  css  js  c++  java
  • 线程使用总结

    一. 线程基本注意点

    (1) Thread的构架函数可接收Runnable及Thread对象。在接收Thread对象时,特别要注意 name属性

    public class Test {
        public static void main(String[] args){
            MyThread thread = new MyThread();
            Thread t1 = new Thread(thread);
            t1.setName("A");
            t1.start();
        }
        
        
        public static class MyThread extends Thread{
            public MyThread(){
                System.out.println("Thread.currentThread().getName():"+Thread.currentThread().getName());
                System.out.println("this.name:"+this.getName());
            }
    
            @Override
            public void run() {
                System.out.println("Thread.currentThread().getName():"+Thread.currentThread().getName());
                System.out.println("this.name(run):"+this.getName());
            }
        }
    }

    输出结果为:

    Thread.currentThread().getName():main
    this.name:Thread-0
    Thread.currentThread().getName():A
    this.name(run):Thread-0

    我们通常认为输出第四行应该和第三行一致,其实不然。this.getName() 获取的是实例对象thread中的属性值,而在main方法t1.setName(“A”),实际更改的是t1对象的属性,并未更改thread实例对象的name的属性;

    另外Thread接收了Runnable及Thread实例对象实际上是直接调用了2个实例的run方法,因此实例所属线程应该是接收他们的线程。

  • 相关阅读:
    867. Transpose Matrix
    896. Monotonic Array
    Java并发包中线程池ThreadPoolExecutor原理探究
    Java中的线程协作之Condition
    Java中的读写锁
    Java中的锁——Lock和synchronized
    Java中的队列同步器AQS
    Java并发编程基础之volatile
    leetcode-数组中只出现一次的数字
    leetcode-比特位计数
  • 原文地址:https://www.cnblogs.com/sandyflower/p/9997118.html
Copyright © 2011-2022 走看看