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

 更新时间:2016年09月30日 11:01:10   投稿:jingxian  
下面小编就为大家带来一篇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接口的方法的全部内容了,希望对大家有所帮助,多多支持脚本之家~

相关文章

  • java语言求解兔子问题代码分析

    java语言求解兔子问题代码分析

    这篇文章主要介绍了Java语言求解兔子问题代码分析,具有一定借鉴价值,需要的朋友可以了解下。
    2017-12-12
  • Mybatis集成到Spring容器的详细步骤

    Mybatis集成到Spring容器的详细步骤

    在现在的JavaEE开发过程中,我们经常会使用到Spring+SpringMVC+Mybatis这个组合,那么Mybatis是如何集成到Spring中的呢,下面通过实例代码给大家详细讲解,感兴趣的朋友跟随小编一起看看吧
    2024-03-03
  • Java集成大模型LangChain4j实战完全指南(推荐)

    Java集成大模型LangChain4j实战完全指南(推荐)

    LangChain4j 的目标是简化将大语言模型(LLM - Large Language Model)集成到Java应用程序中的过程,本文给大家介绍Java集成大模型LangChain4j实战完全指南,感兴趣的朋友跟随小编一起看看吧
    2025-09-09
  • 基于Spring Cache实现Caffeine+Redis二级缓存

    基于Spring Cache实现Caffeine+Redis二级缓存

    本文主要介绍了基于Spring Cache实现Caffeine+Redis二级缓存,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Spring加载加密的配置文件详解

    Spring加载加密的配置文件详解

    这篇文章主要为大家详细介绍了Spring加载加密的配置文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • Java Synchronize下的volatile关键字详解

    Java Synchronize下的volatile关键字详解

    这篇文章主要介绍了Java Synchronize下的volatile关键字详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • springcloud整合到项目中无法启动报错Failed to start bean 'eurekaAutoServiceRegistration'

    springcloud整合到项目中无法启动报错Failed to start bean&n

    这篇文章主要介绍了springcloud整合到项目中无法启动报错Failed to start bean 'eurekaAutoServiceRegistration'问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • 如何解决java:错误:无效的源发行版:16

    如何解决java:错误:无效的源发行版:16

    这篇文章主要介绍了如何解决java:错误: 无效的源发行版:16问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • Java中@DateTimeFormat @JsonFormat失效原因及测试填坑

    Java中@DateTimeFormat @JsonFormat失效原因及测试填坑

    本文主要介绍了Java中@DateTimeFormat @JsonFormat失效原因及测试填坑,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • java中"==" 与equals方法的使用

    java中"==" 与equals方法的使用

    本篇文章介绍了,在java中"==" 与equals方法的使用。需要的朋友参考下
    2013-04-04

最新评论