欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java多线程之:继承Thread类

程序员文章站 2022-05-16 18:33:53
...

1、特点

没有特点,全是缺点:不能再继承别的类、多线程之间不适合共享变量资源

2、基本例子

public class Run extends Thread {
    public static void test() {
        Run r1 = new Run();
        Run r2 = new Run();
        r1.start();
        r2.start();
    }

    private int count = 1;

    @Override
    public void run() {
        for (int i = 0; i < 20; i++) {
            System.out.println(Thread.currentThread().getName() + " 运行 " + count++);//获取当前执行这段代码的线程的名字,变量自增
            try {
                Thread.sleep(300);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

因为new了两个实例出来,所以每个线程各执行各的,变量不会共享,两个线程的执行结果是一样的。

如果只new一个实例,让他执行两次start()方法,就会报错。

3、多线程中使用synchronized(锁)

public class Run extends Thread {

    public static void test() {
        Run r1 = new Run();
        Run r2 = new Run();
        r1.start();
        r2.start();
    }

    private int count = 1;

    @Override
    public void run() {
        synchronized (this) {
            for (int i = 0; i < 10; i++) {
                System.out.println(Thread.currentThread().getName() + " 运行 " + count++);//获取当前执行这段代码的线程的名字,变量自增
                try {
                    Thread.sleep(300);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

因为两个线程各执行各的,互不干扰,所以加锁不加锁结果没有区别,都是线程安全的。

4、多线程中使用原子类型AtomicInteger

public class Run extends Thread {

    public static void test() {
        Run r1 = new Run();
        Run r2 = new Run();
        r1.start();
        r2.start();
    }

    private AtomicInteger count = new AtomicInteger(1);

    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(Thread.currentThread().getName() + " 运行 " + count.getAndIncrement());
            try {
                Thread.sleep(300);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

同样因为两个线程各执行各的,互不干扰,所以用原子类型和普通类型没有区别,都是线程安全的。但是两个线程是并行运行的,这是多线程的基本原则。

相关标签: 程序开发