zoukankan      html  css  js  c++  java
  • hadoop06---多线程

    .1.1. 实现线程的两种方式

    1、继承Thread方式

    见代码MyThreadWithExtends

    2声明实现 Runnable 接口的方式

    见代码MyThreadWithImpliment

    package cn.itcast_01_mythread.thread.testThread;
    
    import java.util.Random;
    
    public class MyThreadWithExtends extends Thread {
        String flag;
        float g = 1;
        
        public MyThreadWithExtends(String flag){
            this.flag = flag;
        }
    
        @Override
        public void run() {//并没有看出来线程1和线程2各自独有的。
            float f = 1;
            f++;//f是线程的值
            g++;//g是堆对象的值
            System.out.println("f:"+f);
            System.out.println("g:"+g);
            String tname = Thread.currentThread().getName();
            System.out.println(tname+"线程的run方法被调用……");
            Random random = new Random();
            for(int i=0;i<2;i++){
                try {
                    Thread.sleep(random.nextInt(10)*100);
                    System.out.println(tname+ "...."+ flag);//flag是堆对象的值,不同的线程和相同的线程来调用这个方法,都是对象里面的值。
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    
        public static void main(String[] args) {
            Thread thread1 = new MyThreadWithExtends("a");
            Thread thread2 = new MyThreadWithExtends("b");
            /*
            有独立的变量作用域。
            run方法是共用的,但是不同线程调的。
            f:2.0
            f:2.0
            g:2.0
            g:2.0
            Thread-1线程的run方法被调用……
            Thread-0线程的run方法被调用……
            Thread-0....a
            Thread-1....b
            Thread-0....a
            Thread-1....b
             */
    //        thread1.start();
    //        thread2.start();
            /**
                    如果是调用thread的run方法,则只是一个普通的方法调用,不会开启新的线程
                    都在主线程运行,所有的变量共享。thread1,thread2是2个堆中的变量。
                run方法是共用的,但是都是主线程调的。
                f:2.0
                g:2.0
                main线程的run方法被调用……
                main....a
                main....a
                f:2.0
                g:2.0
                main线程的run方法被调用……
                main....b
                main....b
             */
            thread1.run();
            thread2.run();
        }
    }
    package cn.itcast_01_mythread.thread.testThread;
    
    
    public class MyThreadWithImpliment implements Runnable {
        int x;
    
        public MyThreadWithImpliment(int x) {
            this.x = x;
        }
    
        @Override
        public void run() {
            String name = Thread.currentThread().getName();
            System.out.println("线程" + name + "的run方法被调用……");
            for (int i = 0; i < 10; i++) {
                System.out.println(x);
                try {
                    Thread.sleep(100);
                    
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    
        public static void main(String[] args) {
            Thread thread1 = new Thread(new MyThreadWithImpliment(1), "thread-1");
            Thread thread2 = new Thread(new MyThreadWithImpliment(2), "thread-2");
    //         thread1.start();
    //         thread2.start();
            // 注意调用run和调用start的区别,直接调用run,则都运行在main线程中
            thread1.run();
            thread2.run();
        }
    }
  • 相关阅读:
    arcgis api 3.x for js 入门开发系列八聚合效果(附源码下载)
    arcgis api 3.x for js 入门开发系列七图层控制(附源码下载)
    arcgis api 3.x for js 入门开发系列六地图分屏对比(附源码下载)
    arcgis api 3.x for js 入门开发系列五地图态势标绘(附源码下载)
    arcgis api 3.x for js 入门开发系列四地图查询(附源码下载)
    Java里面获取当前服务器的IP地址
    Flutter at Google I/O 2018
    Modbus RTU 协议使用汇总
    plsql 创建表空间、用户、赋予权限
    Oracle:ODP.NET Managed 小试牛刀
  • 原文地址:https://www.cnblogs.com/yaowen/p/9006614.html
Copyright © 2011-2022 走看看