• Java的Thread和Runnable


    第一、Runnable、Thread中的run方法和自定义的run方法之间的关系:

     1 interface Runnable{
     2     public abstract void run();
     3 }                                //remove method body
     4 
     5 public class Thread implements Runnable {
     6     private Runnable target;                //封装
     7     public Thread(Runnable target,String name){        //构造函数,name是线程的名称
     8         init(target);
     9     }
    10     
    11     private void init(Runnable target2) {    //检验关口,给属性赋值
    12         this.target = target;
    13     }
    14     
    15     public void run() {
    16         if(target != null){
    17             target.run();    //此run方法指的是自定义的run方法,即Runable中的run方法
    18                     //整个过程中,只有一个对象,只有这个对象有能力调用自定
    19                     //义的run方法。
    20         }    
    21     }    
    22 }
    23 class MyThread implements Runnable{
    24     public void run() {                        //自定义的run方法
    25         
    26     }
    27 }

    第二、Thread和Runnable比较

        1)Thread

     1 package com.threaddemo;
     2 
     3 class MyThread extends Thread{
     4     private int ticket = 5;
     5     public void run(){
     6         for(int i=0;i<100;i++){
     7             if(ticket>0){
     8                 System.out.println(ticket--);
     9             }
    10         }
    11     }
    12 }
    13 
    14 public class ThreadDemo04 {
    15 
    16     public static void main(String[] args) {
    17         MyThread mt1 = new MyThread();
    18         MyThread mt2 = new MyThread();
    19         MyThread mt3  =new MyThread();
    20         mt1.start();
    21         mt2.start();
    22         mt3.start();
    23     }
    24 
    25 }

      2)

     1 package com.runnabledemo;
     2 
     3 class MyThread implements Runnable{
     4     private int ticket =5;
     5     public void run(){
     6         for(int i=0;i<100;i++){
     7             if(ticket>0){
     8                 System.out.println(ticket--);
     9             }
    10         }
    11     }
    12 }
    13 
    14 public class RunnableDemo02 {
    15 
    16     public static void main(String[] args) {
    17         MyThread my = new MyThread();
    18         new Thread(my).start();
    19         new Thread(my).start();
    20         new Thread(my).start();
    21     }
    22 }

    从以上两个程序可知:在使用Runable的整个过程中,只产生一个能操作ticket的对象,实现多个线程共同处理同一资源(ticket),即实现资源的共享;

    而在使用Thread时,每一个New都会产生一个拥有自己的ticket的对象,即每个对象都有各自的ticket,各操作各的,三个ticket数值变化互不影响。

  • 相关阅读:
    写一个通用的事件侦听器函数
    基于LuckySheet在线表格的Excel下载功能开发
    node项目中npm 第三方包引用规则
    js 本地保存 json/txt 文件
    letcood 算法题 -- 两数相加
    ES6新增语法总结
    关于Promise,你必须知道的几点。
    Promise 基础
    学习网页收藏
    android Listview每一个item添加点击事件
  • 原文地址:https://www.cnblogs.com/XuGuobao/p/7200679.html
Copyright © 2020-2023  润新知