当前位置:首页 » 编程语言 » java线程runnable

java线程runnable

发布时间: 2023-01-25 12:58:19

java中的Runnable类是什么意思

在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口;

·Thread类是在java.lang包中定义的。一个类只要继承了Thread类同时覆写了本类中的

run()方法就可以实现多线程操作了,但是一个类只能继承一个父类,这是此方法的局限,

下面看例子:
package org.thread.demo;
class MyThread extends Thread{
private String name;
public MyThread(String name) {
super();
this.name = name;
}
public void run(){
for(int i=0;i<10;i++){
System.out.println("线程开始:"+this.name+",i="+i);
}
}
}
package org.thread.demo;
public class ThreadDemo01 {
public static void main(String[] args) {
MyThread mt1=new MyThread("线程a");
MyThread mt2=new MyThread("线程b");
mt1.run();
mt2.run();
}
}
但是,此时结果很有规律,先第一个对象执行,然后第二个对象执行,并没有相互运行。在

jdk 的文档中可以发现,一旦调用start()方法,则会通过JVM找到run()方法。下面启动

start()方法启动线程:
package org.thread.demo;
public class ThreadDemo01 {
public static void main(String[] args) {
MyThread mt1=new MyThread("线程a");
MyThread mt2=new MyThread("线程b");
mt1.start();
mt2.start();
}
};这样程序可以正常完成交互式运行。那么为啥非要使用start();方法启动多线程呢?
在JDK的安装路径下,src.zip是全部的java源程序,通过此代码找到Thread中的start()方

法的定义,可以发现此方法中使用了private native void start0();其中native关键字表

示可以调用操作系统的底层函数,那么这样的技术成为JNI技术(java Native Interface)

·Runnable接口
在实际开发中一个多线程的操作很少使用Thread类,而是通过Runnable接口完成。
public interface Runnable{
public void run();
}
例子:
package org.runnable.demo;
class MyThread implements Runnable{
private String name;
public MyThread(String name) {
this.name = name;
}
public void run(){
for(int i=0;i<100;i++){
System.out.println("线程开始:"+this.name+",i="+i);
}
}
};
但是在使用Runnable定义的子类中没有start()方法,只有Thread类中才有。此时观察

Thread类,有一个构造方法:public Thread(Runnable targer)
此构造方法接受Runnable的子类实例,也就是说可以通过Thread类来启动Runnable实现的多

线程。(start()可以协调系统的资源):
package org.runnable.demo;
import org.runnable.demo.MyThread;
public class ThreadDemo01 {
public static void main(String[] args) {
MyThread mt1=new MyThread("线程a");
MyThread mt2=new MyThread("线程b");
new Thread(mt1).start();
new Thread(mt2).start();
}
}

· 两种实现方式的区别和联系:
在程序开发中只要是多线程肯定永远以实现Runnable接口为主,因为实现Runnable接口相比

继承Thread类有如下好处:->避免点继承的局限,一个类可以继承多个接口。
->适合于资源的共享
以卖票程序为例,通过Thread类完成:
package org.demo.dff;
class MyThread extends Thread{
private int ticket=10;
public void run(){
for(int i=0;i<20;i++){
if(this.ticket>0){
System.out.println("卖票:ticket"+this.ticket--);
}
}
}
};
下面通过三个线程对象,同时卖票:
package org.demo.dff;
public class ThreadTicket {
public static void main(String[] args) {
MyThread mt1=new MyThread();
MyThread mt2=new MyThread();
MyThread mt3=new MyThread();
mt1.start();//每个线程都各卖了10张,共卖了30张票
mt2.start();//但实际只有10张票,每个线程都卖自己的票
mt3.start();//没有达到资源共享
}
}
如果用Runnable就可以实现资源共享,下面看例子:
package org.demo.runnable;
class MyThread implements Runnable{
private int ticket=10;
public void run(){
for(int i=0;i<20;i++){
if(this.ticket>0){
System.out.println("卖票:ticket"+this.ticket--);
}
}
}
}
package org.demo.runnable;
public class RunnableTicket {
public stati

② java中Runnable接口含义

Java中实现多线程有两种途径:继承Thread类或者实现Runnable接口.
Runnable接口非常简单,就定义了一个方法run(),继承Runnable并实现这个
方法就可以实现多线程了,但是这个run()方法不能自己调用,必须由系统来调用,否则就和别的方法没有什么区别了.
先给一个简单的例子:
public class MultiThread implements Runnable{
public static void main(String[] args){
for(int i=0;i<10;i++){
new Thread(new MultiThread()).start();//correct
//new Thread(new MultiThread()).run 1
//new MultiThread().run() 2
}
}
public void run(){
System.out.println(Thread.currentThread().getName());
}
}
运行后应该启动了10个新的线程,加上主线程一共11个线程,应该输出是Thread-1知道10.
这里要注意启动线程的方式是调用了Thread的start()方法,而不是run方法,如果
用注释里的1或者2输入都是10个main,因为这个时候run()方法还原了,和普通方法一样了.
我们也可以得出一个结论:所有的线程在运行时都是一个Thread实例,虽然可以不用继承Thread
实现多线程,但是最终还是Thread的一个实例.

③ Java中Runnable和Thread的区别

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

④ java runnable线程如何传参

Runnable里面没有传参函数,所以得自己造一个

0.自定义一个接口,继承Runnable,新增一个传参方法

{
publicMyRunnablesetParam(String...param);
}
  1. 实现这个自定义接口

MyRunnablesendMessage=newMyRunnable(){
Stringmessage;
@Override
publicMyRunnablesetParam(String...param){
message=param[0];
returnthis;
}

@Override
publicvoidrun(){
sendMessage(message);
}
};

2.初始化线程池,运行Runnable

=Executors.newCachedThreadPool();
cachedThreadPool.execute(sendMessage.setParam("Iamservice"));

如上所示,线程池调用的一个runnable实例,这个runnable实例传入了一个字符串参数

⑤ Java中Runnable和Thread的区别是什么

在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口;

Thread类是在java.lang包中定义的。一个类只要继承了Thread类同时覆写了本类中的run()方法就可以实现多线程操作了,但是一个类只能继承一个父类,这是此方法的局限。

⑥ 举例说明java中的runnable 接口实现线程,并启动线程的方法.

publicclassRunnableDemo{

publicstaticvoidmain(String[]args)throwsException{
longstatTime=System.currentTimeMillis();

SimpleRunnablerunnable1=newSimpleRunnable();
SimpleRunnablerunnable2=newSimpleRunnable();

//每个Thread(线程)可以接受一个Runnable的实现类做参数
//线程启动时会去运行你实现的run()方法
Threadthread1=newThread(runnable1);
Threadthread2=newThread(runnable2);

thread1.start();//启动线程1
thread2.start();//启动线程2

thread1.join();//等待线程1运行结束
thread2.join();//等待线程2运行结束

longendTime=System.currentTimeMillis();
doubletime=(endTime-statTime)/1000.0;
System.out.println("程序运行时间:"+time+"秒");
//每个任务运行时间都应该是2秒,但是因为你每个任务都用了一个线程去运行
//所以这两个线程是同时(并发)进行的,所以这个程序只需要2秒左右就可以结束
}
}

//写一个实现Runnable接口的类,并实现run()方法
{

@Override
publicvoidrun(){
runTask();//运行你的任务
}

privatevoidrunTask(){
try{
Thread.sleep(2000);//假设你的任务需要两秒完成
}catch(InterruptedExceptionex){
ex.printStackTrace(System.err);
}
}

}

⑦ java 多线程 继承Thread和实现Runnable的区别

Java中线程的创建有两种方式:

1、 通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中

2、 通过实现Runnable接口,实例化Thread类

Runnable
接口只有一个方法 run(),我们声明自己的类实现 Runnable
接口并提供这一方法,将我们的线程代码写入其中,就完成了这一部分的任务。但是 Runnable 接口并没有任何对线程的支持,我们还必须创建
Thread 类的实例,这一点通过 Thread 类的构造函数public Thread(Runnable target);来实现。

3、继承Thread实现的模式是 定义多个线程,各自完成各自的任务.

4、实现Runnable实现的模式是 定义多个线程,实现一个任务.

总结:一个是多个线程分别完成自己的任务,一个是多个线程共同完成一个任务。其实,在实现一个任务用多个线程来做也可以用继承Thread类来实现,只是比较麻烦,一般我们用实现Runnable接口来实现。

⑧ java中Runnable接口含义

java中Runnable接口:是一个接口,它里面只有一个run()方法,没有start()方法,继承Runnable并实现这个方法就可以实现多线程了,但是这个run()方法不能自己调用,必须由系统来调用。

举例如下:

[java] view plain

public interface Runnable{

public void run();

}

所以,即使实现了Runnable接口,那也无法启动线程,必须依托其他类。

而Thread类,有一个构造方法,参数是Runnable对象,也就是说可以通过Thread类来启动Runnable实现的多线程。

[java] view plain

public Thread(Runnable target) {

init(null, target, "Thread-" + nextThreadNum(), 0);

}

所以,实现Runnable接口后,需要使用Thread类来启动。

热点内容
星途哪个配置最值得买 发布:2025-07-20 23:02:21 浏览:120
幻境7脚本 发布:2025-07-20 22:51:25 浏览:436
怎么配置vs2015的环境变量 发布:2025-07-20 22:48:49 浏览:57
为什么开锁人不建议安装密码锁 发布:2025-07-20 22:41:56 浏览:254
phpsocketlisten 发布:2025-07-20 22:39:07 浏览:429
绝地求生未来之役要下什么服务器 发布:2025-07-20 22:34:26 浏览:67
linux对比工具 发布:2025-07-20 22:31:45 浏览:750
音乐缓存在什么文件夹 发布:2025-07-20 22:31:40 浏览:818
ftp服务器怎么清理 发布:2025-07-20 22:08:26 浏览:4
点胶缓存机 发布:2025-07-20 22:06:45 浏览:738