`

多线程知识2开启线程最基本的两种方法

阅读更多
实现多线程常见的两种方式

1、通过继承Thread类来实现

class MyThread extends Thread {

	public void run() {
		System.out.println("当前" + Thread.currentThread().getName() + "正在执行任务");
	}
}

public class Test {

	public static void main(String[] args) {
		Thread t1 = new MyThread();
		t1.setName("A线程");
		t1.start();
		Thread t2 = new MyThread();
		t2.setName("B线程");
		t2.start();
	}
}
运行结果:
当前B线程正在执行任务
当前A线程正在执行任务

  注意:多次运行你会发现显示的结果每次都会有变动而且和我们预测的结果不一样,这是由于CPU在执行时,分配任务一般属于抢占式,那个线程先抢到先执行。如果让看到的现象更直观,可以在run方法使用循环

2、通过实现Runnable接口实现

public class Test2 {

	public static void main(String[] args) {
		Runnable r = new MyThread2();
		Thread t1 = new Thread(r);
		t1.setName("A线程");
		t1.start();
		
		Thread t2 = new Thread(r);
		t2.setName("B线程");
		t2.start();
	}
}

class MyThread2 implements Runnable {

	public void run() {
		System.out.println("当前" + Thread.currentThread().getName() + "正在执行任务");
	}
}

 

程序运行结果:(每次都会变同上)
当前B线程正在执行任务
当前A线程正在执行任务

 3、通过上面两个小程序的运行结果发现,无论那种方式实现多线程,都要去重写run()方法,开启线程都是通过start()方法,执行start()方法后就会执行到run()方法,run方法就是线程执行任务的入口,但是要注意一点,调用了start()方法不一定就会立即去执行run方法,因为多线程运行时本身就是抢占式的,每个线程之间也有优先级等区别。感兴趣的同学可以去看下API文档,你会发现两者实质相似,Thread类也实现的 Runnable接口。

4、两种开启线程的比较
a)第一种开启线程代码要简洁些
b)通过接口开启线程可以避免单继承
c)通过接口开启线程可以实现多个线程共享一个资源
使用原则:能使用接口尽量使用接口

 

分享到:
评论

相关推荐

    Java高并发精讲(云盘下载)

    一、多线程的基本知识 1.1进程与线程的介绍  程序运行时在内存中分配自己独立的运行空间,就是进程  线程:它是位于进程中,负责当前进程中的某个具备独立运行资格的空间。  进程是负责整个程序的运行,而...

    java 面试题 总结

    与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。...

    AIC的Java课程1-6章

     理解和应用Java异常,常用类,IO,集合和多线程等开发技术。  课时安排  总学时:52学时  授课:48学时 (含约20学时实验)  考试:4学时  预备知识  了解和使用操作系统,...

    windows驱动开发技术详解-part2

     8.5.2 内核模式下开启多线程  8.5.3 内核模式下的事件对象  8.5.4 驱动程序与应用程序交互事件对象  8.5.5 驱动程序与驱动程序交互事件对象  8.5.6 内核模式下的信号灯  8.5.7 内核模式下的互斥体  ...

    JAVA核心知识点整理(有效)

    2.2.3. 本地方法区(线程私有) ................................................................................................................ 23 2.2.4. 堆(Heap-线程共享)-运行时数据区 .....................

    java核心知识点整理.pdf

    本地方法区(线程私有) ................................................................................................................ 23 2.2.4. 堆(Heap-线程共享)-运行时数据区 ...........................

    Windows驱动开发技术详解的光盘-part1

     8.5.2 内核模式下开启多线程  8.5.3 内核模式下的事件对象  8.5.4 驱动程序与应用程序交互事件对象  8.5.5 驱动程序与驱动程序交互事件对象  8.5.6 内核模式下的信号灯  8.5.7 内核模式下的互斥体  ...

    飞鸽传书(IPMessenger) 源码

     有了上边的知识,开发文件传输功能就变得简单多了,文件的接受也可以类推了,同样开启一个线程维护接受文件链表,逐次接受身下的文件,链表为空时。文件传输会遇到文件读写问题,有的文件发送是被打开了,这样会...

    新版Android开发教程.rar

    2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance Alliance Alliance Alliance 什么是开放手机联盟? 开放手机联盟, Open Handset Alliance :是美国 Google 公司与 2007 年 ...

    IIS6.0 IIS,互联网信息服务

    Internet Information Services(IIS,互联网信息服务),是由微软公司提供的基于运行Microsoft Windows的互联网基本服务。最初是Windows NT版本的可选包,随后内置在Windows 2000、Windows XP Professional和...

Global site tag (gtag.js) - Google Analytics