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

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

hot3.png

    在写一个很小很小的网页面监控程序的时候需要使用到java的多线程,在网上简单看了一下,使用了一下,简单总结一下以备以后使用。

java程序的多线程组织有两种方式:实现Runnable接口和继承Thread。

1. 实现Runnable接口:

// 实现Runnable接口class MyThreadRunner implements Runnable {		public void run() {		System.out.println("Thread running!");	}	}
启动方式:
// 实现Runnable接口方式的线程启动MyThreadRunner runner = new MyThreadRunner();Thread thread = new Thread(runner);thread.start();

2. 继承Thread类方式:

// 继承Threadclass MyThread extends Thread {	public void run() {		System.out.println("Thread running!");	}}
启动方式:

// 实现Thread接口方式的线程启动MyThread myThread = new MyThread();myThread.start();
3. 两者的区别与相同点:

    其实从本质上来说,两者都是一样的。不管使用哪种方式,可以看到都需要创建一个Thread对象(或子类对象),而在经过查看Thread源码,可以看到其实Thread其实已经实现了Runnable接口,所以我们可以大胆的想象一下,线程是这样子的:在启动一个新的线程后,线程都会自动的去执行Thread对象中Runnable接口的run方法;继承Thread类的方式,其实是重写Thread类实现的run方法而已;而实现Runnable接口的方式,则是直接替换Thread对象(子对象)中的target属性(Runnable类型的);

    相对来说,实现Runnable的话更方便实现多线程间的资源共享,因为创建线程的target属性指向的是同一个Runnable实现类对象。

Thread类反编源码片段:

public class Thread implements Runnable {	......	    /* What will be run. */    private Runnable target;    	......    public void run() {	if (target != null) {	    target.run();	}    }	......	}
线程Demo完整代码:
package tutorial.example;public class ThreadDemo {	public static void main(String[] args) {		// 实现Runnable接口方式的线程启动		MyThreadRunner runner = new MyThreadRunner();		Thread thread = new Thread(runner);		thread.start();				// 实现Thread接口方式的线程启动		MyThread myThread = new MyThread();		myThread.start();	}}// 实现Runnable接口class MyThreadRunner implements Runnable {		public void run() {		System.out.println("Thread running!");	}	}// 继承Threadclass MyThread extends Thread {	public void run() {		System.out.println("Thread running!");	}}

转载于:https://my.oschina.net/u/656588/blog/147430

你可能感兴趣的文章
书签(Bookmarks)
查看>>
Java 信号量 Semaphore 介绍
查看>>
Ubuntu常用软件安装与使用
查看>>
Anroid开发中常用快捷键
查看>>
RecyclerView分隔线定制
查看>>
文本处理(CSS,JS)
查看>>
VBScript 函数
查看>>
shell编程学习
查看>>
java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I错误解决
查看>>
apache源码安装
查看>>
使用TensorFlow遇到的若干问题
查看>>
poj2187
查看>>
Linux下使用 xrandr 命令设置屏幕分辨率
查看>>
Bzoj4766: 文艺计算姬(Matrix-tree/prufer)
查看>>
swift - 移除界面上的所有元素
查看>>
Linux常用函数
查看>>
Oracle dbms_output.put_line长度限制问题
查看>>
Hibernate-ORM:07.Hibernate中的参数绑定
查看>>
关于全局HOOK的2个友情提醒
查看>>
深入理解闭包系列第四篇——常见的一个循环和闭包的错误详解
查看>>