带你玩转java多线程系列 二 Thread 和 Runnable

本文对比了Java中Runnable接口与Thread类在多线程编程中的使用,通过实例演示了Runnable如何提供更灵活的多线程实现方式,同时讨论了线程安全问题及其解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Thread 和 Runnable

1 Runnable是接口,而Thread是继承,可以同时实现多个接口,但是不能同时继承多个类
2 Runnable比Thread灵活的多
 
当我们使用Runnable测试多线程非常简单,因为Runnable是对Thread的进一步解耦
我们首先建立一个类记做为Model,实现Runnable接口,在类里建立一个实例变量,接着覆盖run方法。
我们重新建立一个含有main函数的类,在该类中我们首先建立一个Model类型的实例变量model,接着将该Runnable类的实例
作为参数传递给Thread类型对象,并且调用Thread类的start方法。
public class teach1 {

    public static void main(String[] args) {

        Model model = new Model();

        new Thread(model).start();

        new Thread(model).start();

    }

}

class Model implements Runnable{

    int num = 20;

 

    @Override

    public void run() {

        // TODO Auto-generated method stub

        while(num>0){

            System.out.println(Thread.currentThread().getName()+" "+num);

            num--;

        }

    }

}

 

运行结果如下
Thread-0 20
Thread-0 19
Thread-0 18
Thread-1 20
Thread-0 17
Thread-0 15
Thread-1 16
Thread-0 14
Thread-0 12
Thread-0 11
Thread-0 10
Thread-0 9
Thread-0 8
Thread-0 7
Thread-1 13
Thread-1 5
Thread-1 4
Thread-1 3
Thread-1 2
Thread-1 1
Thread-0 6
显然出现了线程安全问题,在系列三中我将写出synchronized的解决方法
假如你使Model继承Thread显然你在想在其他类里来实验java的多线程安全显然是非常难的,因为继承Thread耦合度非常的高。无法再另一个新的类
对该成员变量num进行开多个线程操作 真的发现如果继承Thread类无法进行安全性实验啊  兄弟们给指点一下啊
class Model extends Thread{

    int num = 20;

 

    @Override

    public void run() {

        // TODO Auto-generated method stub

        while(num>0){

            System.out.println(Thread.currentThread().getName()+" "+num);

            num--;

        }

    }

}

我怎么想也不能再另一个类里对该类的成员变量num进行开多个线程操作

转载于:https://www.cnblogs.com/winAlaugh/p/5474734.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值