zoukankan      html  css  js  c++  java
  • 带你玩转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进行开多个线程操作

  • 相关阅读:
    linux使用docker-compose部署软件配置
    Linux CentOS Python开发环境搭建教程
    Linux使用scp命令进行文件远程拷贝详解
    浅析Vue.js 中的条件渲染指令
    浅谈Vue响应式(数组变异方法)
    Laravel框架定时任务2种实现方式示例
    Docker 运行时的用户与组管理的方法
    laravel5实现微信第三方登录功能
    Linux服务器间文件实时同步的实现
    从零开始搭建vue移动端项目到上线的步骤
  • 原文地址:https://www.cnblogs.com/winAlaugh/p/5474734.html
Copyright © 2011-2022 走看看