java实现多线程的两种方式继承Thread类和实现Runnable接口的方法
作者:jingxian 发布时间:2022-07-24 04:27:18
标签:java,多线程,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();
}
}


猜你喜欢
- 1.内容中含有xml预定好的实体,如“<”和“&”,对xml来说是禁止使用的,针对这种字符,解决方式是使用CDATA部件以&q
- 一、简介什么是线程池?池的概念大家也许都有所听闻,池就是相当于一个容器,里面有许许多多的东西你可以即拿即用。java中有线程池、连接池等等。
- 项目地址:https://github.com/JeasonWong/SlackLoadingView老规矩,先上效果。图好大。。说下第一眼
- 在阻塞队里中,除了对元素进行增加和删除外,我们可以把元素的删除做一个延迟的处理,即使用DelayQueue的方法。本文就来和大家聊聊Java
- 1.使用usb口输入的扫描枪,这里实现使用了winform首先创建一个CS文件using System;using System.Colle
- 题目描述在进行网络编程时,有时需要对局域网的所有主机进行遍历,为此需要获得内网的所以IP地址题目实现:获得内网的所有IP地址的小应用。解题思
- 本文实例讲述了C#简单读写txt文件的方法。分享给大家供大家参考,具体如下://write txtStringBuilder builder
- Android studio 出现 Unsupported major.minor version 52.0解决办法 最近更新了
- 开门见山在IT圈里,每当我们谈论并发时,必定会说起在一台计算机上同时运行的一系列线程。如果这台电脑上有多个处理器或者是一个多核处理器,那么这
- 一、概述今天给大家带来SurfaceView的一个实战案例,话说自定义View也是各种写,一直没有写过SurfaceView,这个玩意是什么
- 上一篇:C# Redis学习系列一:Redis的认识、下载、安装、使用一.redis 设置密码使用下载好的 redis-cli.exe指令:
- 详解Java对象的强、软、弱和虚引用+ReferenceQueue一、强引用(StrongReference)强引用是使用最普遍的引用。如果
- Java 线程池原理Executor框架的两级调度模型在HotSpot VM的模型中,Java线程被一对一映射为本地操作系统线程。JAVA线
- 文件下载这种事情是很耗时的。之前使用AsyncTask这样的异步类来做下载,然后切到后台就 * 掉。所以打算试试Service。(不过按目前那
- 内发光原理内发光原理简单概况是:采样周边像素alpha取平均值叠加效果。概括来说似乎好像特别简单,但需要一定的理解和消化。发光物体可以当做是
- 使用simplecommand下载网络图片,并显示到ImageView控件上。1 在app module的build.gradle将simp
- 前面一篇文章实现了使用ViewPager实现 * launcher拖动效果 ,后来很多朋友问能不能实现左右循环滑动效果和引导页面。今天实现了左
- WPF的ImageBrush是一个比较常见也比较复杂的笔刷,它继承自图块笔刷(TileBrush)。使用图块画笔绘制区域涉及以下三个组成部分
- BroadcastReceiver(广播 * )是Android中的四大组件之一。下面就具体介绍一下Broadcast Receiver组件
- 以前在别的地方见过一个通过调用系统API实现屏幕截图的例子,从内心来说我不太喜欢在C#代码中出现这种情况,现在什么都讲“和谐”,我觉得这种做