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


    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进行开多个线程操作

  • 相关阅读:
    上传图片,语音,和富文本(webuploader,dropzone, froala)
    java代码备份mysql数据库
    maven 父子工程打包 并且上传linux服务器
    docker+fastdfs+nginx 实现分布式大文件存储系统以及视频缓存播放
    docker eureka 注册中心 服务提供者通信机制
    lvs dr 模型配置详解
    spring cloud 详解
    JS前端创建CSV或Excel文件并浏览器导出下载
    修改ElementUI源码实践
    Leaflet+heatmap实现离线地图加载和热力图应用
  • 原文地址:https://www.cnblogs.com/winAlaugh/p/5474734.html
Copyright © 2020-2023  润新知