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超级实用的Freemarker工具类

    Java超级实用的Freemarker工具类

    这篇文章主要介绍了Java超级实用的Freemarker工具类,文章围绕相关资料介绍以及代码描述非常详细,需要的小伙伴可以参考一下,希望对你得学习有所帮助
    2022-02-02
  • Spring实战之@Autowire注解用法详解

    Spring实战之@Autowire注解用法详解

    这篇文章主要介绍了Spring实战之@Autowire注解用法,结合实例形式详细分析了Spring @Autowire注解具体实现步骤与相关使用技巧,需要的朋友可以参考下
    2019-12-12
  • Spring中的BeanDefinition注册流程详解

    Spring中的BeanDefinition注册流程详解

    这篇文章主要介绍了Spring中的BeanDefinition注册流程详解,  NamespaceHandler简单来说就是命名空间处理器,Spring为了开放性提供了NamespaceHandler机制,这样我们就可以根据需求自己来处理我们设置的标签元素,需要的朋友可以参考下
    2023-12-12
  • Java for循环和foreach循环的性能对比分析

    Java for循环和foreach循环的性能对比分析

    这篇文章主要介绍了Java for循环和foreach循环的性能对比分析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Java中的byte & 0xff到底有什么作用?

    Java中的byte & 0xff到底有什么作用?

    这篇文章主要介绍了Java中的byte & 0xff到底有什么作用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • 解决springcloud 配置gateway 出现错误的问题

    解决springcloud 配置gateway 出现错误的问题

    今天给大家分享springcloud 配置gateway 出现错误的问题,其实解决方法很简单,只需要降低springcloud版本,改成Hoxton.SR5就好了,再次改成Hoxton.SR12,也不报错了,下面给大家展示下,感兴趣的朋友一起看看吧
    2021-11-11
  • Java中的常用输入输出语句的操作代码

    Java中的常用输入输出语句的操作代码

    这篇文章主要介绍了Java中的常用输入输出语句的操作代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • java:无法访问org.springframework.boot.SpringApplication的解决方法

    java:无法访问org.springframework.boot.SpringApplication的解决方法

    这篇文章主要给大家介绍了关于java:无法访问org.springframework.boot.SpringApplication的解决方法,文中通过实例代码将解决的办法介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • 解析ConcurrentHashMap: 预热(内部一些小方法分析)

    解析ConcurrentHashMap: 预热(内部一些小方法分析)

    ConcurrentHashMap是由Segment数组结构和HashEntry数组结构组成。Segment的结构和HashMap类似,是一种数组和链表结构,今天给大家普及java面试常见问题---ConcurrentHashMap知识,一起看看吧
    2021-06-06
  • MyBatis配置文件的写法和简单使用

    MyBatis配置文件的写法和简单使用

    MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。这篇文章主要介绍了MyBatis配置文件的写法和简单使用,需要的朋友参考下
    2017-01-01

最新评论