博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hadoop06---多线程
阅读量:5154 次
发布时间:2019-06-13

本文共 2839 字,大约阅读时间需要 9 分钟。

.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();    }}

 

转载于:https://www.cnblogs.com/yaowen/p/9006614.html

你可能感兴趣的文章
socket阻塞与非阻塞,同步与异步
查看>>
团队工作第二天
查看>>
System类
查看>>
tableView
查看>>
Happy Great BG-卡精度
查看>>
Xamarin Visual Studio不识别JDK路径
查看>>
菜鸟“抄程序”之道
查看>>
Ubuntu下关闭防火墙
查看>>
TCP/IP 邮件的原理
查看>>
w3m常用快捷键
查看>>
【Unity 3D】学习笔记四十一:关节
查看>>
原型设计工具
查看>>
windows下的C++ socket服务器(4)
查看>>
css3 2d转换3d转换以及动画的知识点汇总
查看>>
【Java】使用Eclipse进行远程调试,Linux下开启远程调试
查看>>
js对象属性方法
查看>>
对Vue为什么不支持IE8的解释之一
查看>>
Maven安装配置
查看>>
ORA-10635: Invalid segment or tablespace type
查看>>
计算机改名导致数据库链接的诡异问题
查看>>