`
zx_code
  • 浏览: 98546 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

java线程Thread和Runnable区别和联系

    博客分类:
  • Java
阅读更多
我们都晓得java实现线程2种方式,一个是继承Thread,另一个是实现Runnable。

模拟窗口买票,第一例子继承thread,代码如下
package thread;

public class ThreadTest {
	
	public static void main(String[] args) {
		
		Thread1 t1 = new Thread1("01");
		Thread1 t2 = new Thread1("03");
		t1.start();
		t2.start();
		
		//可以看出一共卖了200张票
	}
}

class Thread1 extends Thread{
	
	private int ticket = 100;
	
	public Thread1(String name)
	{
		super(name);
	}
	
	@Override
	public void run() {
		while(ticket > 0)
		{
			System.out.println("窗口:"+Thread.currentThread().getName()+",卖了1个,剩余:"+(ticket--));
		}
	}
}


模拟窗口买票,实现Runnable接口,代码如下
package thread;

public class RunnableTest {
	
	public static void main(String[] args) {
		
		Runnable1 r1 = new Runnable1();
		
		new Thread(r1, "01").start();
		new Thread(r1, "03").start();
		
		//2个窗口一共卖了100张
	}

}

class Runnable1 implements Runnable
{
	private int ticket = 100;
	
	@Override
	public void run() {
		while(ticket > 0)
		{
			System.out.println("窗口:"+Thread.currentThread().getName()+",卖了1个,剩余:"+(ticket--));
		}
	}
}


通过上面代码运行我们可以得到如下结论:

1.Thread和Runnable都可以实现多线程(废话)
2.Thread是类,而Runnable是接口,这就是类和接口区别,类只能继承一次,而接口可以实现多个接口。
3.Thread实现Runnable接口,这个可以查看Thread的源代码。
4.最重要的分享资源功能,一般我们使用多线程就是快速解决资源问题。Runnable可以实现资源分享,类实现Runnable并不具备线程功能,必须通过new Thread(runabble子类)调用start()启动线程,所以我们通常new一个runnable的子类,启动多个线程解决资源问题。Thread是类所以我们每次new一个对象时候资源已经实例化了,不能资源共享,Thread类要实现资源共享,可以声明变量为static,类共享的可以解决。
5.通过以上建议最好实现Runnable接口 实现多线程。


欢迎交流企鹅群:211367604
30
17
分享到:
评论
5 楼 zx_code 2015-06-23  
focus2008 写道
两个线程存在数据竞争,尽然不用锁?

肯定要用,这只是写的测试案例而已
4 楼 zx_code 2015-06-23  
bassda 写道
Thread t = new Thread1();
Thread t1 = new Thread(t,"01"); 
Thread t2 = new Thread(t,"03"); 
t1.start(); 
t2.start(); 
这样写就能共享了,实际上和Runnable没什么区别。

是的,可以的
3 楼 bassda 2015-06-20  
Thread t = new Thread1();
Thread t1 = new Thread(t,"01"); 
Thread t2 = new Thread(t,"03"); 
t1.start(); 
t2.start(); 
这样写就能共享了,实际上和Runnable没什么区别。
2 楼 focus2008 2015-06-20  
两个线程存在数据竞争,尽然不用锁?
1 楼 cywhoyi 2015-06-19  
join()

相关推荐

    详解Java中Thread 和Runnable区别

    详解Java中Thread和Runnable区别 Java中Thread和Runnable是两个不同的概念,它们都是Java中的线程机制,但是它们之间有着本质的区别。 Thread是Java中的一个类,而Runnable是一个接口。Thread类实现了Runnable接口...

    Java中Runnable和Thread的区别

    在Java编程语言中,多线程的实现有多种方式,其中最常见的是通过继承`Thread`类和实现`Runnable`接口。这两种方法各有其特点和适用场景,理解它们之间的区别对于编写高效、可维护的多线程应用至关重要。 ### 继承...

    thread 线程类 实现runnable接口

    Thread 线程类是 Java 中 Thread 和 Runnable 接口的实现,它提供了线程的基本操作和管理。下面是对 Thread 类的详细介绍: 1. Runnable 接口 Runnable 接口是 Thread 类的基类,它提供了 run() 方法,该方法是...

    java 多线程Thread与runnable的区别

    Java 多线程 Thread 与 Runnable 的区别 Java 多线程技术是 Java 语言中的一种基础技术,用于实现多任务并发执行的功能。在 Java 中,实现多线程有两种方法:继承 Thread 类和实现 Runnable 接口。在本文中,我们将...

    java线程_Thread_Runnable

    Java提供了两种创建线程的方式:继承Thread类和实现Runnable接口。 1. 继承Thread类创建线程: 当你选择继承Thread类时,你需要创建一个新的类,这个类扩展自Thread类。Thread类已经实现了Runnable接口,所以你不...

    多线程的Runnable_和thread有什么区别

    ### 多线程的Runnable与Thread的区别 在Java中实现多线程有两种主要方式:一种是继承`Thread`类;另一种是实现`Runnable`接口。本文将深入探讨这两种方法的区别,帮助初学者更好地理解并选择适合场景的多线程实现...

    java多线程Runnable实例

    `Runnable`接口是Java实现多线程的一种方式,通过实现`Runnable`接口并创建`Thread`对象,可以轻松地创建并运行多线程。`TestRunnable.java`文件展示了这一过程,同时也提醒我们在实际开发中要注意线程同步和通信,...

    JAVA中使用Thread类和Runnable接口创建多线程

    在Java中创建线程有两种方法:使用Thread类和使用Runnable接口。在使用Runnable接口时需要建立一个Thread实例。因此,无论是通过Thread类还是Runnable接口建立线程,都必须建立Thread类或它的子类的实例。

    Java多线程技术 线程的死锁,详细阐述了多线程的两种实现方法: 由Thread类派生子类;实现Runnable接口

    继承`Thread`类的方法简洁明了,但在Java中不建议过度使用继承,尤其是为了实现多线程的目的。相比之下,实现`Runnable`接口的方式更加灵活,适用于大多数情况,特别是当一个类已经继承了另一个类的情况下。 #### ...

    【java学习记录】11.多线程实现阶乘计算(Thread类和Runnable接口)

    总结来说,Java中的`Thread`类和`Runnable`接口提供了两种创建多线程的方式,它们都可用于实现阶乘计算。理解这些基础概念是进行并发编程的关键,也是提升程序效率的重要手段。在实际应用中,应根据项目需求和最佳...

    JAVA多线程Thread和Runnable的实现

    有两种主要的方式可以实现多线程:继承`Thread`类和实现`Runnable`接口。这两种方法各有特点,适用于不同的场景。 **继承Thread类** 当一个类直接继承自`Thread`类时,这个类本身就成为一个线程实体。你可以重写`...

    线程 JAVA java线程 java线程第3版 java线程第2版第3版合集

    本书第二版提供了对Thread和ThreadGroup类、Runnable接口和语言的同步操作符内容的全面讨论。它解释了如何在不同的平台上调度线程,如何开发CPUScheduler类来实现你自己的调度策略。其他扩展例子包括实现读/写锁、...

    Java线程状态流转图

    Java线程状态流转图是一种用于描述Java线程生命周期中不同的状态和状态转换的图形表示方式。该图形展示了Java线程从创建到终止的整个生命周期,并详细介绍了每种状态的特点和转换规则。 NEW(初始化状态) 在Java...

    java线程之使用Runnable接口创建线程的方法

    Java提供了两种主要的方式来创建线程:继承Thread类和实现Runnable接口。本文将详细讲解使用Runnable接口创建线程的方法。 首先,为什么我们要选择实现Runnable接口而不是直接继承Thread类呢?这是因为Java不支持...

    java线程.pdf

    Java线程有五种基本状态:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Terminated)。线程的状态会随着程序的运行而变化: 1. **新建**:当创建了一个新的线程对象后,该线程处于新建...

    Java线程(Java.Thread)(中英版)

    Java线程是Java编程语言中的一个核心概念,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,线程是通过`java.lang.Thread`类或者实现`Runnable`接口来创建和管理的。这个资料包包含的是关于...

    Java有两种实现多线程的方式:通过Runnable接口、通过Thread直接实现,请掌握这两种实现方式,并编写示例程序。

    在Java中,实现多线程的两种主要方式分别是:**通过继承`Thread`类** 和 **实现`Runnable`接口**。下面将详细介绍这两种方式,并提供相应的示例程序。 #### 一、通过继承`Thread`类实现多线程 在Java中,可以通过...

    Java 模拟线程并发

    在Java中,线程并发可以通过多种方式实现,包括继承Thread类、实现Runnable接口以及使用ExecutorService和Future等高级API。下面将详细探讨这些知识点。 首先,Java中创建线程主要有两种方法。一种是通过继承Thread...

    Java线程学习和总结

    Java线程的创建主要有两种方式:继承`Thread`类和实现`Runnable`接口。继承`Thread`类时,重写`run()`方法并在其中编写线程代码;实现`Runnable`接口则需要将线程代码放入`run()`方法中,并通过`Thread`类的构造函数...

    java多线程Demo

    Java线程有10个优先级(MIN_PRIORITY, NORM_PRIORITY, MAX_PRIORITY),默认优先级是NORM_PRIORITY。但是,线程优先级并不保证绝对的执行顺序,操作系统调度策略可能影响实际执行顺序。 7. join()方法: 一个线程...

Global site tag (gtag.js) - Google Analytics