runnable和thread(runnable里包含thread吗为什么可以直接在runnable里直接创建thread对象)

:暂无数据 2026-07-14 09:10:01 :2

runnable和thread(runnable里包含thread吗为什么可以直接在runnable里直接创建thread对象)

这篇文章给大家聊聊关于runnable和thread,以及runnable里包含thread吗为什么可以直接在runnable里直接创建thread对象对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

本文目录

runnable里包含thread吗为什么可以直接在runnable里直接创建thread对象

Runnable接口和Thread类是java中实现多线程的两中方法。
Thread类的构造方法有8个,但常用的只有4个,分别为:
Thread类中的两个最主要的方法:
(1)run()—包含线程运行时所执行的代码,即线程需要完成的任务,是线程执行体。
(2)start()—用于启动线程。
实现Runnable接口的类必须使用Thread类的实例才能创建线程。

java里为什么有了Thread还要有一个Runnable接口

这要看它们的作用了,Thread是一个类,而Runnable是一个接口,两个里面都有run方法,Thread只能被继承实现,Runnable 是implement ,举个简单的例子,如果你一个类继承自另一个类,这时候你又想实现run方法,那么只能使用runnable这个来实现,这是你这个问题最主要的一点,其次 ,runable 涉及资源可以共享这个问题,而继承自Thread类的方法,资源是相对独立的。

Thread类和Runnable接口实现方式的区别

1 线程接口的实现有两种方式,第一:继承Thread类;第二:实现Runnnable接口;
2 两种创建方式上的不同:
建线程的第一种方式:继承Thread ,由子类复写run方法。
1,定义类继承Thread类;
2,目的是复写run方法,将要让线程运行的代码都存储到run方法中;
3,通过创建Thread类的子类对象,创建线程对象;
4,调用线程的start方法,开启线程,并执行run方法。
创建线程的第二种方式:实现一个接口Runnable。
1,定义类实现Runnable接口。
2,覆盖接口中的run方法(用于封装线程要运行的代码)。
3,通过Thread类创建线程对象;
4,将实现了Runnable接口的子类对象作为实际参数传递给Thread类中的构造函数。
3 下面是具体的代码展示两种方式创建线程:
继承Thread类创建线程的代码:
public class ThreadDemo {
public static void main(String args) {
// ThreadTest是继承了Thread类
ThreadTest t1=new ThreadTest (" 1");
t1.start();
}
}
//线程类 继承Thread类
public class ThreadTest extends Thread {
private int ticket=100;//每个线程都拥有100张票
public ThreadTest (){}
public ThreadTest (String name){
super(name);
}
@Override
public void run() {
while(ticket》0){
System.out.println(Thread.currentThread().getName());
}
}
}
实现Runnable 接口的方式:
class Person{
private int sum;
public void add(int n){
sum+=n;
System.out.println("sum="+sum);
}
}
//Person类实现Runnable接口
class Person implements Runnable{
private Person b=new Person ();
public void run(){
synchronized(b){
for(int x=0;x《3;x++)
{
b.add(100);
}
}
}
}
4 实际开发中一般使用Runnable接口的方式比较多,因为:
通过继承Thread类的方式,可以完成多线程的建立。但是这种方式有一个局限性,如果一个类已经有了自己的父类,就不可以继承Thread类
而实现Runnable接口可以避免单继承的局限性。

java实现一个线程,用直接继承Thread类好,还是实现Runnable更好

这两个没什么区别,看你个人喜好

thread内部源码里使用的也是实现runnable

callable与他俩区别事带个future类可以带返回值

要是实在要说的话,Java单继承多实现,如果你想实现多线程又想继承其他类的话,那你就用runnable,

没有绝对的好与不好,得看你实际需求的场景。

望采纳

关于Thread和Runnable的关系,以下说法哪一个是正确的

四个选项都有问题。
正确的讲法应该是:
Thread类实现了Runnable接口。
非要选一个就选B吧。

android Thread和Runnable的区别

Thread和Runnable都是java里面的东西,并非android特有
1,区别,Thread是一个类,它实现了在另一个线程上执行一段代码的功能;Runnable是一个接口
2,联系:Thread实现了Runnable接口
3,Runnable在android中独有的用法:可以给handler post 一个runnable对象,指定一个delay时间来执行。

java 中Thread 和Runnable有何区别

区别:Thread是类,而Runnable是接口。
抽象类和接口的区别如下:
① 在类来继承抽象类时,只需实现部分具体方法和全部抽象方法,而实现接口则要实现里面的全部方法。
②在接口中无成员变量,而抽象类中可有成员变量。
在Java中引进接口主要是为了解决多继承的问题。
实现多线程主要继承Thread 类和实现Runnable接口。

java多线程runnable和thread的区别 面试题

runnable和thread的区别(多线程必须用Runable)
Java中有两种实现多线程的方式以及两种方式之间的区别
看到一个面试题.问两种实现多线程的方法.没事去网上找了找答案.
网上流传很广的是一个网上售票系统讲解.转发过来.已经不知道原文到底是出自哪里了.
Java中有两种实现多线程的方式。一是直接继承Thread类,二是实现Runnable接口。那么这两种实现多线程的方式在应用上有什么区别呢?
为了回答这个问题,我们可以通过编写一段代码来进行分析。我们用代码来模拟铁路售票系统,实现通过四个售票点发售某日某次列车的100张车票,一个售票点用一个线程表示。
首先这样编写这个程序:
Java代码
class ThreadTest extends Thread{
private int ticket = 100;
public void run(){
while(true){
if(ticket 》 0){
System.out.println(Thread.currentThread().getName() +
"is saling ticket" + ticket--);
}else{
break;
}
}
}
}
源码打印?
class ThreadTest extends Thread{
private int ticket = 100;
public void run(){
while(true){
if(ticket 》 0){
System.out.println(Thread.currentThread().getName() +
"is saling ticket" + ticket--);
}else{
break;
}
}
}
}
main测试类:
Java代码
public class ThreadDome1{
public static void main(String args){
ThreadTest t = new ThreadTest();
t.start();
t.start();
t.start();
t.start();
}
}
源码打印?
public class ThreadDome1{
public static void main(String args){
ThreadTest t = new ThreadTest();
t.start();
t.start();
t.start();
t.start();
}
}
上面的代码中,我们用ThreadTest类模拟售票处的售票过程,run方法中的每一次循环都将总票数减1,模拟卖出一张车票,同时该车票号打印出来,直接剩余的票数到零为止。在ThreadDemo1类的main方法中,我们创建了一个线程对象,并重复启动四次,希望通过这种方式产生四个线程。从运行的结果来看我们发现其实只有一个线程在运行,这个结果 告诉我们:一个线程对象只能启动一个线程,无论你调用多少遍start()方法,结果只有一个线程。
我们接着修改ThreadDemo1,在main方法中创建四个Thread对象:
Java代码
public class ThreadDemo1{
public static void main(String args){
new ThreadTest().start();
new ThreadTest().start();
new ThreadTest().start();
new ThreadTest().start();
}
}
源码打印?
public class ThreadDemo1{
public static void main(String args){
new ThreadTest().start();
new ThreadTest().start();
new ThreadTest().start();
new ThreadTest().start();
}
}
Java代码
class ThreadTest extends Thread{
private int ticket = 100;
public void run(){
while(true){
if(ticket 》 0){
System.out.println(Thread.currentThread().getName() +
" is saling ticket" + ticket--);
}else{
break;
}
}
}
}
源码打印?
class ThreadTest extends Thread{
private int ticket = 100;
public void run(){
while(true){
if(ticket 》 0){
System.out.println(Thread.currentThread().getName() +
" is saling ticket" + ticket--);
}else{
break;
}
}
}
}
这下达到目的了吗?
从结果上看每个票号都被打印了四次,即 四个线程各自卖各自的100张票,而不去卖共同的100张票。这种情况是怎么造成的呢?我们需要的是,多个线程去处理同一个资源,一个资源只能对应一个对象,在上面的程序中,我们创建了四个ThreadTest对象,就等于创建了四个资源,每个资源都有100张票,每个线程都在独自处理各自的资源。
经过这些实验和分析,可以总结出,要实现这个铁路售票程序,我们只能创建一个资源对象,但要创建多个线程去处理同一个资源对象,并且每个线程上所运行的是相同的程序代码。在回顾一下使用接口编写多线程的过程。
Java代码
public class ThreadDemo1{
public static void main(String args){
ThreadTest t = new ThreadTest();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
}
}
源码打印?
public class ThreadDemo1{
public static void main(String args){
ThreadTest t = new ThreadTest();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
}
}
Java代码
class ThreadTest implements Runnable{
private int tickets = 100;
public void run(){
while(true){
if(tickets 》 0){
System.out.println(Thread.currentThread().getName() +
" is saling ticket " + tickets--);
}
}
}
}
源码打印?
class ThreadTest implements Runnable{
private int tickets = 100;
public void run(){
while(true){
if(tickets 》 0){
System.out.println(Thread.currentThread().getName() +
" is saling ticket " + tickets--);
}
}
}
}
上面的程序中,创建了四个线程, 每个线程调用的是同一个ThreadTest对象中的run()方法,访问的是同一个对象中的变量(tickets)的实例,这个程序满足了我们的需求。在Windows上可以启动多个记事本程序一样,也就是多个进程使用同一个记事本程序代码。
可见, 实现Runnable接口相对于继承Thread类来说,有如下显著的好处:
(1)适合多个相同程序代码的线程去处理同一资源的情况,把虚拟CPU(线程)同程序的代码,数据有效的分离,较好地体现了面向对象的设计思想。
(2)可以避免由于Java的单继承特性带来的局限。我们经常碰到这样一种情况,即当我们要将已经继承了某一个类的子类放入多线程中,由于一个类不能同时有两个父类,所以不能用继承Thread类的方式,那么,这个类就只能采用实现Runnable接口的方式了。
(3)有利于程序的健壮性,代码能够被多个线程共享,代码与数据是独立的。当多个线程的执行代码来自同一个类的实例时,即称它们共享相同的代码。多个线程操作相同的数据,与它们的代码无关。当共享访问相同的对象是,即它们共享相同的数据。当线程被构造时,需要的代码和数据通过一个对象作为构造函数实参传递进去,这个对象就是一个实现了Runnable接口的类的实例。

runnable里包含thread吗为什么可以直接在runnable里直接创建thread对象的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于runnable里包含thread吗为什么可以直接在runnable里直接创建thread对象、runnable里包含thread吗为什么可以直接在runnable里直接创建thread对象的信息别忘了在本站进行查找哦。

runnable和thread(runnable里包含thread吗为什么可以直接在runnable里直接创建thread对象)

本文编辑:admin

更多文章:


编程基础指令(数控编程指令有哪些)

编程基础指令(数控编程指令有哪些)

大家好,今天小编来为大家解答以下的问题,关于编程基础指令,数控编程指令有哪些这个很多人还不知道,现在让我们一起来看看吧!

2026年11月6日 12:50

如何运行perl教程(怎样把自己的电脑设置成服务器)

如何运行perl教程(怎样把自己的电脑设置成服务器)

各位老铁们好,相信很多人对如何运行perl教程都不是特别的了解,因此呢,今天就来为大家分享下关于如何运行perl教程以及怎样把自己的电脑设置成服务器的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

2026年11月6日 12:20

arcgis怎么设置文本框样式?用JS怎么实现一个把一个文本框中的选中内容加粗,效果基本上和编辑器的加粗效果相同急需

arcgis怎么设置文本框样式?用JS怎么实现一个把一个文本框中的选中内容加粗,效果基本上和编辑器的加粗效果相同急需

今天给各位分享arcgis怎么设置文本框样式的知识,其中也会对arcgis怎么设置文本框样式进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年11月6日 10:50

停止运行的快捷键(电脑怎么停止运行程序快捷键)

停止运行的快捷键(电脑怎么停止运行程序快捷键)

其实停止运行的快捷键的问题并不复杂,但是又很多的朋友都不太了解电脑怎么停止运行程序快捷键,因此呢,今天小编就来为大家分享停止运行的快捷键的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年11月6日 10:40

bios setup(“Bios setup”怎么在电脑里面设置)

bios setup(“Bios setup”怎么在电脑里面设置)

这篇文章给大家聊聊关于bios setup,以及“Bios setup”怎么在电脑里面设置对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

2026年11月6日 10:00

三个表盘都代表什么(卡西欧手表里面三个小表盘是什么意思)

三个表盘都代表什么(卡西欧手表里面三个小表盘是什么意思)

各位老铁们,大家好,今天由我来为大家分享三个表盘都代表什么,以及卡西欧手表里面三个小表盘是什么意思的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

2026年11月6日 08:10

国产免费的服务器系统(服务器用什么系统)

国产免费的服务器系统(服务器用什么系统)

大家好,关于国产免费的服务器系统很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于服务器用什么系统的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

2026年11月6日 07:50

代码生成器app下载手机版(条码生成软件免费)

代码生成器app下载手机版(条码生成软件免费)

各位老铁们好,相信很多人对代码生成器app下载手机版都不是特别的了解,因此呢,今天就来为大家分享下关于代码生成器app下载手机版以及条码生成软件免费的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

2026年11月6日 05:50

php递归删除目录(php怎么删除文件夹和文件夹下的所有文件)

php递归删除目录(php怎么删除文件夹和文件夹下的所有文件)

各位老铁们好,相信很多人对php递归删除目录都不是特别的了解,因此呢,今天就来为大家分享下关于php递归删除目录以及php怎么删除文件夹和文件夹下的所有文件的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

2026年11月6日 03:30

vimoapp安卓手机版(制作VLog常用的APP有哪些呢)

vimoapp安卓手机版(制作VLog常用的APP有哪些呢)

大家好,vimoapp安卓手机版相信很多的网友都不是很明白,包括制作VLog常用的APP有哪些呢也是一样,不过没有关系,接下来就来为大家分享关于vimoapp安卓手机版和制作VLog常用的APP有哪些呢的一些知识点,大家可以关注收藏,免得下

2026年11月6日 01:50

最近更新

荣耀play4tpro和荣耀play5t(aqmal10是华为什么型号手机)
2026-11-06 13:20:20 浏览:0
热门文章

新站如何通过网站维护提升SEO排名
2026-10-13 20:56:21 浏览:6
sql server2008下载地址(如何下载SQL Server 2008 R2 SP2免费版)
2026-10-05 05:30:29 浏览:6
标签列表