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

作者:jingxian 时间:2022-07-24 04:27:18 

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

*区别:

*继承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,多线程,runnable
0
投稿

猜你喜欢

  • 在Spring中编写事务的介绍

    2021-12-15 10:33:18
  • Java的Struts框架简介与环境配置教程

    2023-10-29 05:23:03
  • java图片缩放实现图片填充整个屏幕

    2021-06-09 18:30:07
  • 面试初级Java开发问到Arrays

    2023-11-27 05:40:04
  • springboot异常处理的基本规范

    2023-11-23 15:48:19
  • Spark SQL的自定义函数UDF使用

    2022-07-31 04:19:47
  • spring boot学习笔记之操作ActiveMQ指南

    2023-09-12 20:11:52
  • Java创建多线程的两种方式对比

    2023-09-14 21:02:49
  • SpringCloud Feign转发请求头(防止session失效)的解决方案

    2022-08-29 12:25:59
  • springboot实现定时任务的四种方式小结

    2021-10-20 20:38:06
  • FasfDFS整合Java实现文件上传下载功能实例详解

    2022-05-27 02:30:46
  • Spring集成Druid连接池及监控配置的全过程

    2023-08-25 05:22:20
  • SpringBoot集成Swagger构建api文档的操作

    2023-11-03 09:13:51
  • 基于FeignException$InternalServerError的解决方案

    2023-04-25 15:50:45
  • java商城项目实战之购物车功能实现

    2023-11-02 21:17:43
  • java修改JFrame默认字体方式

    2022-11-16 14:02:50
  • Spring Cache框架应用介绍

    2023-06-15 22:32:59
  • Java实现map转换成json的方法详解

    2022-09-09 12:26:03
  • Java编程基础测试题分享

    2023-11-27 22:14:58
  • 简述Java中的四种引用类型

    2023-11-29 00:46:56
  • asp之家 软件编程 m.aspxhome.com