java实现多线程的两种方式继承Thread类和实现Runnable接口的方法

实现方式和继承方式有什么区别呢?

*区别:

*继承Thread:线程代码存放在Thread子类run方法中

*实现Runnable:线程代码存放在接口的子类的run方法中

*实现方式的好处:避免了单继承的局限性

*在定义线程时,建议使用实现方式,当然如果一个类没有继承父类,那么也可以通过继承Thread类来实现多线程

*注意:Runnable接口没有抛出异常,那么实现它的类只能是try-catch不能throws

*Java对多线程的安全问题提供了专业的解决方式就是同步代码块synchronized(对象){需要同步的代码}

*同步的前提:

*1.有2个及以上的线程

*2.多个线程使用用一个锁(对象)

*同步的好处:解决了多线程的安全问题

*同步的弊端:多个线程需要判断锁,较为消耗资源

package 多线程;

class Ticket implements Runnable
{
//	private static int tick = 100;
	private int tick=100;
	Object obj = new Object();//創建一個對象或者自己重新写一个类来创建一个对象下面同步关键字需要用到
	@Override
	public void run()
	{
		while(true)
		{
			synchronized(obj)
//			synchronized(this)
			{
			if(tick>0){
				try {Thread.sleep(10);} catch (Exception e) {	}
				System.out.println(Thread.currentThread().getName()+"...銷售:"+(tick--)+"号票");
//				tick--;
			}else {
				break;
			}
			}
		}
	}

}
public class Test
{
	public static void main(String[] args)
	{
		Ticket t = new Ticket();//创建一个实现了Runnable接口的类

		//创建4个多线程对象并传递上面接口对象给其构造方法
		Thread t1 = new Thread(t);//创建了一个线程
		Thread t2 = new Thread(t);//创建了一个线程
		Thread t3 = new Thread(t);//创建了一个线程
		Thread t4 = new Thread(t);//创建了一个线程

		//开启线程
		t1.start();
		t2.start();
		t3.start();
		t4.start();
	}
}

以上就是小编为大家带来的java实现多线程的两种方式继承Thread类和实现Runnable接口的方法的全部内容了,希望对大家有所帮助,多多支持我们~

时间: 2016-09-28

java多线程编程之使用runnable接口创建线程

1.将实现Runnable接口的类实例化. 2.建立一个Thread对象,并将第一步实例化后的对象作为参数传入Thread类的构造方法. 最后通过Thread类的start方法建立线程.下面的代码演示了如何使用Runnable接口来创建线程: package mythread;public class MyRunnable implements Runnable{ public void run() {  System.out.println(Thread.currentThread().get

Java多线程实现Callable接口

调用方法: /** * 点击量/月(年)Callable */ public void yearlyClickCallable() { // 获取参数 String year = getPara("year"); // 统计数据集X List<String> xList = new ArrayList<String>(); xList.add("January"); xList.add("February"); xList

Java多线程Callable接口实现代码示例

对于多线程,大家并不陌生,对于如何创建线程也是轻车熟路,对于使用new thread和实现runable接口的方式,不再多说.这篇博文我们介绍第三种:实现Callable接口. Callable接口 接口定义: @FunctionalInterface public interface Callable<V> { V call() throws Exception; } 从Callable的定义可以看出: Callable接口类似于Runnable,两者都是为那些其实例可能被另一个线程执行的类

Java多线程阻塞与唤醒代码示例

java线程的阻塞及唤醒 1. sleep() 方法: sleep(-毫秒),指定以毫秒为单位的时间,使线程在该时间内进入线程阻塞状态,期间得不到cpu的时间片,等到时间过去了,线程重新进入可执行状态.(暂停线程,不会释放锁) //测试sleep()方法 class Thread7 implements Runnable{ @Override public void run() { for(int i=0;i<50;i++){ System.out.println(Thread.currentT

浅谈Java多线程的优点及代码示例

尽管面临很多挑战,多线程有一些优点使得它一直被使用.这些优点是: 资源利用率更好 程序设计在某些情况下更简单 程序响应更快 资源利用率更好 想象一下,一个应用程序需要从本地文件系统中读取和处理文件的情景.比方说,从磁盘读取一个文件需要5秒,处理一个文件需要2秒.处理两个文件则需要: 5秒读取文件A 2秒处理文件A 5秒读取文件B 2秒处理文件B --------------------- 总共需要14秒 从磁盘中读取文件的时候,大部分的CPU时间用于等待磁盘去读取数据.在这段时间里,CPU非常的

Java多线程编程实现socket通信示例代码

流传于网络上有关Java多线程通信的编程实例有很多,这一篇还算比较不错,代码可用.下面看看具体内容. TCP是Tranfer Control Protocol的 简称,是一种面向连接的保证可靠传输的协议.通过TCP协议传输,得到的是一个顺序的无差错的数据流.发送方和接收方的成对的两个socket之间必须建 立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以

Java创建与结束线程代码示例

本文讲述了在Java中如何创建和结束线程的最基本方法,只针对于Java初学者.一些高级知识如线程同步.调度.线程池等内容将会在后续章节中逐步深入. 创建线程 创建普通线程有两种方式,继承Thread类或实现Runnable接口.示例如下. 方法1:继承Thread类 创建方法示例: public class MyThread1 extends Thread { @Override public void run() { //TODO Auto-generated method stub supe

Java map的学习及代码示例

前言 最近正在做的高校云平台项目中接触Map比较多,关于map的使用不是很熟悉,所以在此将map的几个方法再次学习下. Map与Collection 提到Map集合接口就不能不提到Collection集合接口,map和Collection都是集合接口,Collection中包含了我们经常用的list和set子接口:而Map是与Collection处于平级的地位:Collection中存储的是一组对象,而Map存储的是一个键值对(key/value). Map java为数据结构中的映射定义了一个

以银行取钱为例模拟Java多线程同步问题完整代码

简单了解下在操作系统中进程和线程的区别: 进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1--n个线程.(进程是资源分配的最小单位) 线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小.(线程是cpu调度的最小单位) 线程和进程一样分为五个阶段:创建.就绪.运行.阻塞.终止. 多进程是指操作系统能同时运行多个任务(程序). 多线程是指在同一程序中有多个顺序流在执行.首先存钱取钱的这个操作,应该是线程操作的

Java中filter用法完整代码示例

本文研究的主要是Java中filter过滤器的相关用法,具体实现代码如下. filter过滤器主要使用于前台向后台传递数据是的过滤操作.程度很简单就不说明了,直接给几个已经写好的代码: 一.使浏览器不缓存页面的过滤器 import javax.servlet.*; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * 用于的使 Browser 不缓存页面的过滤器 */ public cla

java并发编程之同步器代码示例

同步器是一些使线程能够等待另一个线程的对象,允许它们协调动作.最常用的同步器是CountDownLatch和Semaphore,不常用的是Barrier和Exchanger 队列同步器AbstractQueuedSynchronizer是用来构建锁或者其他同步组件的基础框架,它内部使用了一个volatiole修饰的int类型的成员变量state来表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作. 同步器的主要使用方式是继承,子类通过继承同步器并实现它的抽象方法来管理同步状态,在抽

Java多线程Condition接口原理介绍

Condition接口提供了类似Object的监视器方法,与Lock配合可以实现等待/通知模式,但是这两者在使用方式以及功能特性上还是有差别的 Condition接口详解 Condition定义了等待/通知两种类型的方法,当前线程调用这些方法时,需要提前获取到Condition对象关联的锁.Condition对象是由Lock对象(调用Lock对象的newCondition()方法)创建出来的,换句话说,Condition是依赖Lock对象的. Lock lock = new ReentrantL