Java 继承Thread创建线程(static和synchronized的重要性)

Java 继承Thread创建线程(static和synchronized的重要性),第1张

Java 继承Thread创建线程(static和synchronized的重要性)

创建线程两种方式
1.继承 Thread类
2.实现 Runnable接口

这里我用的第一种方式,创建一个类并继承Thread,重写父类的run()方法

public class MyThread extends Thread{

    @Override
    public  void run() {
        this.abc();
    }

    public void abc(){
        for (int i = 0; i < 10; i++) {
            System.out.println(Thread.currentThread().getName() +" = "+ i);
        }
    }

}
public class Test {
    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        MyThread myThread1 = new MyThread();

        myThread.start();
        myThread1.start();
    }

}

输出结果:

结果显示,两个线程在互抢资源,那如果我想线程1执行完再执行线程2,就需要加个锁 synchronized 。

public class MyThread extends Thread{

    @Override
    public  void run() {
        this.abc();
    }

    public static synchronized void abc(){
        for (int i = 0; i < 10; i++) {
            System.out.println(Thread.currentThread().getName() +" = "+ i);
        }
    }

}
public class Test {
    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        MyThread myThread1 = new MyThread();

        myThread.start();
        myThread1.start();
    }

}

输出结果:

补充说明一下方法上为什么加了 static和synchronized
会发现 abc方法加上了两个关键字 static和synchronized

    synchronized 是同步锁的意思,意思就是我这个方法执行完了以后,其他地方才可以继续调用这个方法执行。static修饰就变成了静态方法,这样两个线程 *** 作的都是一个内存,如果不加上static *** 作的就是两个内存的东西了,如果不加的话执行结果如下:

代码:

public class MyThread extends Thread{

    @Override
    public  void run() {
        this.abc();
    }

    public synchronized void abc(){
        for (int i = 0; i < 10; i++) {
            System.out.println(Thread.currentThread().getName() +" = "+ i);
        }
    }

}

结果:

以上个人学习笔记,有不对的地方欢迎指出

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5707376.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存