`
Franciswmf
  • 浏览: 800357 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Thread类、Runnable接口、ThreadLocal

 
阅读更多
--引用参考
https://blog.csdn.net/u013755987/article/details/51855098
通过继承Thread类或者实现Runnable接口可以创建线程。
【Thread类】
1、继承Thread类的方式创建线程(Thread类本身也实现了Runnable接口)
public class ThreadDemo2 extends Thread{
	private int ticketNum=10;
	
	/**
	 * 火车票下单接口(重写父类线程run方法)
	 */
	@Override
	public void run() {
		/*解决并发方式之一*/
		synchronized (this.getClass()) {
			String name=Thread.currentThread().getName();
			System.out.println("---->\t"+name+"线程in");
			if(ticketNum>0){
				System.out.println(name+"线程抢了1张火车票,余票还剩="+(--ticketNum)+"张");
			}else{
				System.out.println(name+"线程没抢到票");
			}
		}
	}

	@Override
	public void destroy() {
		System.out.println("销毁线程");
	}
	
}

2、测试
public class ThreadDemoTest2 {

	public static void main(String[] args) {
		ThreadDemo2 demo2=new ThreadDemo2();
		for (int i = 0; i < 50; i++) {
			//共享同一个线程实例demo2
			new Thread(demo2, "线程"+i).start();
		}
	}
}

【Runnable接口】
1、实现Runnable接口的方式创建线程
public class RunnableDemo implements Runnable{
	private int ticketNum=30;
	
	/**
	 * 火车票下单接口(重写父类线程run方法)
	 */
	@Override
	public void run() {
		/*解决并发方式之一*/
		synchronized (this.getClass()) {
			String name=Thread.currentThread().getName();
			System.out.println("---->\t"+name+"线程in");
			if(ticketNum>0){
				System.out.println(name+"线程抢了1张火车票,余票还剩="+(--ticketNum)+"张");
			}else{
				System.out.println(name+"线程没抢到票");
			}
		}
	}
}

2、测试
public class RunnableDemoTest {
/*
        创建线程时,实现Runnable接口的方式比继承Thread类的方式好在哪?
	1、适合多个相同的程序代码的线程去处理同一资源的情况 ?
	2、可以避免由于java单继承特征带来的局限性 
	3、增强开发程序的健壮性,代码可以多个线程共享,代码和数据是独立的?
*/
	
	/**
	 * 测试方法1
	 */
	private static void test1(){
		/**
		 * 场景:100个线程去抢30张票
		 */
		Runnable demo=new RunnableDemo();
		for (int i = 0; i < 100; i++) {
			//创建对象的时候用接口创建
			new Thread(demo,"线程"+i).start();
		}
	}

	public static void main(String[] args) {
		test1();
		/*Runnable demo2=new RunnableDemo();
		Runnable demo3=new RunnableDemo();
		Runnable demo4=new RunnableDemo();
		new Thread(demo2).start();
		new Thread(demo3).start();
		new Thread(demo4).start();
		System.out.println("主线程输出");*/
	}


--Thread.sleep(0)的意义--PPMM的故事
http://blog.csdn.net/wl455624651/article/details/7388250

--【ThreadLocal】
--彻底理解ThreadLocal
http://blog.csdn.net/lufeng20/article/details/24314381
--百度百科 ThreadLocal
https://baike.baidu.com/item/ThreadLocal/4915311?fr=aladdin
分享到:
评论

相关推荐

    Java 中ThreadLocal类详解

    `Accessor`类实现了Runnable接口,每个线程执行`run`方法时会调用`ThreadLocalVariableHolder.increment()`来增加变量的值,然后打印出来。由于每个线程有自己的ThreadLocal变量副本,所以不同线程的输出不会相互...

    使用Java ThreadLocal.docx

    在这个例子中,`MyRunnable`类中的`threadLocal`变量被两个不同的线程(`thread1`和`thread2`)使用。尽管它们共享同一个Runnable实例,但每个线程都会有自己的ThreadLocal副本,因此它们的`threadLocal`变量持有...

    这是一个线程类(Thread

    本篇文章将深入探讨`Thread`类的使用、线程的创建方法以及`Runnable`接口的实现。 ### 1. `Thread`类概述 `Thread`类是Java语言中的核心组件,位于`java.lang.thread`包中。它是所有线程操作的基础,包括启动、...

    Java Thread Programming

    继承Thread类的方法直接扩展Thread类并重写run()方法,而实现Runnable接口则需要创建一个实现了Runnable接口的类,并在run()方法中定义线程的行为。这两种方式各有优缺点,继承Thread类允许直接使用this关键字引用...

    JAVA thread

    2. 实现Runnable接口:如果一个类不能或者不希望直接继承Thread,可以选择实现Runnable接口。这样,一个Runnable对象可以被传递给Thread的构造函数,创建一个新的Thread实例。同样,线程的任务是在`run()`方法中定义...

    Android 详解ThreadLocal及InheritableThreadLocal

    **InheritableThreadLocal** 类与ThreadLocal类似,但其特性是当新线程被创建时(比如通过`Thread.start()`),新线程会继承父线程中InheritableThreadLocal变量的副本。这意味着在子线程中可以访问到父线程中设置的...

    JAVA 多线程的PPT和示例

    在Java中,多线程主要通过两种方式实现:继承Thread类和实现Runnable接口。这份"JAVA多线程的PPT和示例"将深入讲解这些内容,帮助开发者更全面地理解和掌握Java多线程技术。 首先,让我们来看看继承Thread类的多...

    JAVA 线程类应用

    在Java中,主要通过两种方式创建线程:继承Thread类和实现Runnable接口。Thread类是Java内置的线程类,通过继承Thread并重写其run()方法,可以直接创建一个新的线程。例如: ```java class MyThread extends Thread...

    JAVA 多线程编程

    在Java中,实现多线程的方式主要有两种:继承Thread类和实现Runnable接口。 1. 继承Thread类:创建一个新的类,继承自Thread类,然后重写其run()方法。创建该类的实例并调用start()方法,即可启动新线程。这种方式...

    JAVA多线程编程详解-详细操作例子

    在Java中,实现多线程主要有两种方式:继承Thread类和实现Runnable接口。 1. 继承Thread类: 当自定义一个类继承自Thread类时,你需要重写run()方法,该方法包含线程要执行的代码。例如,在`TwoThread`类中,run()...

    java 聊天系统 直接导入就可运行

    在Java中,实现多线程有两种主要方式:继承Thread类和实现Runnable接口。在这个聊天系统中,可能每个用户会有一个单独的线程来处理其发送和接收的消息,确保不同用户之间的交互不会互相阻塞。使用Thread类或Runnable...

    java 多线程

    在Java中,多线程的实现主要有两种方式:继承Thread类和实现Runnable接口。 1. 继承Thread类:创建一个新的类,该类继承自Thread类,并重写其run()方法。当创建此类的实例并调用start()方法时,就会启动一个新的...

    面试中多线程问题

    如果我们需要继承其他类,同时也需要继承 Thread 类,这时实现 Runnable 接口是一个更好的选择。 2. Thread.start()与 Thread.run()有什么区别? Thread.start() 方法是 native 方法,它启动线程,使之进入就绪...

    Java多线程程序设计-JSP教程,Java技巧及代码

    在Java中,有两种主要的方式来实现多线程:继承Thread类和实现Runnable接口。 首先,我们要理解多线程的基本概念。多线程是一种并发执行多个指令流的技术,每个指令流被称为一个线程。线程比进程更轻量级,因为它们...

    浅谈JAVA中多线程的实现.zip

    主要的实现方式有两种:继承Thread类和实现Runnable接口。 1. 继承Thread类:这是创建新线程的最直接方法。通过创建一个新的Thread类的子类,并重写它的run()方法,就可以定义线程的行为。当创建这个子类的实例并...

    java中的线程使用[整理].pdf

    - **实现Runnable接口**:创建一个实现了Runnable接口的类,实现run()方法,然后将这个Runnable对象作为参数传递给Thread类的构造函数。这种方式更灵活,可以避免单继承的限制,且便于实现资源共享。 5. **启动...

    JAVA Test_Thread

    然后通过`Thread`类的构造函数传入你的`Runnable`实例,创建一个新的线程对象。 ```java class MyRunnable implements Runnable { public void run() { // 你的代码 } } Thread thread = new Thread(new ...

    java线程代码

    Java中的线程可以通过继承Thread类或实现Runnable接口来创建。Thread类代表一个线程,而Runnable接口则定义了线程运行时需要执行的任务。如果需要创建一个不依赖于特定Thread实例的可重用线程,推荐使用Runnable接口...

    实例讲解Java并发编程之ThreadLocal类

    Java并发编程中的ThreadLocal类是一个非常重要的工具,它允许我们在多线程环境下为每个线程维护独立的变量副本,从而避免了线程间的数据共享和同步问题。ThreadLocal并不是一个线程,而是一个线程局部变量的容器。...

Global site tag (gtag.js) - Google Analytics