【多线程】Java线程的创建

简介: 第2章 Java并行程序基础 2.2 初始线程:线程的基本操作 2.2.1 新建线程 新建线程方式一: Thread thread = new Thread();thread.start();  new 一个对象thread后,执行这个对象的start()方法则会启动该线程的内部run()方法。

第2章 Java并行程序基础

2.2 初始线程:线程的基本操作

2.2.1 新建线程

新建线程方式一:

Thread thread = new Thread();
thread.start();
  new 一个对象thread后,执行这个对象的start()方法则会启动该线程的内部run()方法。run()方法这里没定义,下面会有讲。

  但要注意!如果像下面用run()来启动新线程,它只会在当前线程中,串行执行run()中的代码。

Thread thread2 = new Thread();
thread2.run();

新建线程方式二:

  默认情况下,Thread的run()方法什么都没有过做,线程地启动就马上结束了。如果要让线程做点什么,就要重载run()方法,把你的"任务"填进去。  

Thread thread3 = new Thread(){//(匿名内部类)
	@Override
	public void run() {
		//super.run();
		System.out.println("Hello,I am t3");
	}
};
thread3.start();

新建线程方式三:

  如果没有特别的需要,都可以通过继承Thread,重载run()方法来自定义线程。(方式三完整代码:点击Github打开链接

public class SocketThread extends Thread {
	public SocketThread(Socket socket) {
		//...
		start();
	}
	public void run() {
	//super.run();
	//...
}}
public class SocketServer {
	public static final int PORT = 50000;
	public static void main(String[] args) throws IOException {
		ServerSocket s = new ServerSocket(PORT);
		System.out.println("开始: " + s);
		while(true) {
			Socket socket = s.accept();
			new SocketThread(socket);//匿名方法
		}
	}
}

新建线程方式四:

  因为Java是单继续的,也就是说继续本身也是一各很宝贵的资源,因此我们也可以使用Runable接口来实现同样的操作。Runable接口是一个单方法接口,它只有一个run()方法:

public interface Runnable {
	public abstract void run();
}

  此外,Thread类有一个非常重要的构造方法,它传入一个Runable接口的实例,在start()方法调用时,新的线程就会执行Runable接口的run()方法。实现上,Thread类默认的run()就是这么做的:

public class Thread implements Runnable {
	public Thread(Runnable target) {
		init(null, target, "Thread-" + nextThreadNum(), 0);
	}
	private Runnable target;
	@Override
	public void run() {
		if (target != null) {
			target.run();
		}
	}
}

  这种方式实现了Runable接口,并将该实例传入Thread。这样避免重载Thread类的run()方法,单纯使用接口来定义Thread,也是最常用的做法:

public class CreateThread_WithInterface implements Runnable {
	public static void main(String[] args) {
		Thread thread = new Thread(new CreateThread_WithInterface());
		thread.start();
	}
	@Override
	public void run() {
		System.out.println("Oh, I am Runable");
	}
}

  下面是新建线程方式四的变种,这样代码更简洁:

public class CreateThread_WithInterface2 {
	public static void main(String[] args) {
		Thread thread = new Thread(new Runnable() {
			@Override
			public void run() {
				System.out.println("I am Implemented...");
			}
		});
		thread.start();
	}
}

  也可以这样变种(点击打开Github链接):

public class CreateThread_WithInterface_Lock {
	// http://www.cnblogs.com/benshan/p/3551987.html
	public static void main(String[] args) {
		Lock lock = new ReentrantLock();
		Consumer consumer = new Consumer(lock);
		Producer producer = new Producer(lock);
		new Thread(consumer).start();
		new Thread(producer).start();
	}
}
public class Producer implements Runnable {
	private Lock lock;
	public Producer(Lock lock) {
		this.lock = lock;
	}
	@Override
	public void run() {
		// TODO Auto-generated method stub
	}
}



附完整代码:点击打开Github链接

本书 第1章走入并行世界 视频:点击打开链接




**Wu_Being博客声明**:本人博客欢迎转载,请标明博客原文和原链接!谢谢!《Java线程的创建》:http://blog.csdn.net/u014134180/article/details/51243721


如果你看完这篇博文,觉得对你有帮助,并且愿意付赞助费,那么我会更有动力写下去。




目录
相关文章
|
23小时前
|
Java
死锁是线程间争夺资源造成的无限等待现象,Java示例展示了两个线程各自持有资源并等待对方释放,导致死锁。`
【6月更文挑战第20天】死锁是线程间争夺资源造成的无限等待现象,Java示例展示了两个线程各自持有资源并等待对方释放,导致死锁。`volatile`保证变量的可见性和部分原子性,确保多线程环境中值的即时更新。与`synchronized`相比,`volatile`作用于单个变量,不保证原子操作,同步范围有限,但开销较小。`synchronized`提供更全面的内存语义,保证原子性和可见性,适用于复杂并发控制。
10 3
|
17小时前
|
安全 Java
深入解读JAVA多线程:wait()、notify()、notifyAll()的奥秘
【6月更文挑战第20天】JAVA多线程中,wait(), notify(), notifyAll()是Object类的关键同步机制。wait()让线程等待并释放锁,直到被notify()或notifyAll()唤醒或超时。它们必须在同步块中使用,持有锁的线程调用。notify()唤醒一个等待线程,notifyAll()唤醒所有。最佳实践包括:与synchronized结合,循环检查条件,避免循环内notify(),通常优先使用notifyAll()。
|
18小时前
|
缓存 安全 Java
java线程面试题2019最新整理
java线程面试题2019最新整理
|
1天前
|
Java
你还在单线程里奋斗?来看看 Java 多线程创建的魅力!
【6月更文挑战第19天】单线程程序中任务依次执行导致效率低,而Java多线程可并行处理任务,提高效率。在示例中,多线程版本并行运行三个任务,减少总耗时,展示出多线程在处理并发和提升响应速度上的优势。使用`Thread`类创建线程,通过`start()`启动,`join()`确保所有线程执行完毕,揭示了多线程在编程中的强大潜力。
|
1天前
|
Java 开发者
线程的诞生之路:Java多线程创建方法的抉择与智慧
【6月更文挑战第19天】Java多线程编程中,开发者可选择继承Thread类或实现Runnable接口。继承Thread直接但受限于单继承,适合简单场景;实现Runnable更灵活,支持代码复用,适用于如银行转账这类需多线程处理的复杂任务。在资源管理和任务执行控制上,Runnable接口通常更优。
|
1天前
|
Java
Java 多线程新手必读:线程的创建技巧与陷阱
【6月更文挑战第19天】Java多线程初学者须知:创建线程可通过继承`Thread`或实现`Runnable`接口。继承`Thread`限制单继承,实现`Runnable`更灵活。记得调用`start()`而非`run()`启动线程,避免并发问题时需正确同步共享资源。示例代码展示两种创建方式及未同步导致的问题。
|
1天前
|
Java
揭秘!为何Java多线程中,继承Thread不如实现Runnable?
【6月更文挑战第19天】在Java多线程中,实现`Runnable`比继承`Thread`更佳,因Java单继承限制,`Runnable`可实现接口复用,便于线程池管理,并分离任务与线程,提高灵活性。当需要创建线程或考虑代码复用时,实现`Runnable`是更好的选择。
|
1天前
|
Java 开发者
从菜鸟到大神:Java 多线程创建的两大流派,你属于哪一种?
【6月更文挑战第19天】Java多线程编程中,创建线程有两种主要方式:继承`Thread`类和实现`Runnable`接口。继承`Thread`直接重写`run()`,简单易懂,但限制了单继承。实现`Runnable`接口更灵活,允许多接口实现,利于资源共享和代码组织。新手可能偏好继承,但高手常选`Runnable`以遵循面向对象设计。不断学习和实践,才能在Java多线程领域深化。
|
1月前
|
安全 Java
深入理解Java并发编程:线程安全与性能优化
【2月更文挑战第22天】在Java并发编程中,线程安全和性能优化是两个重要的主题。本文将深入探讨这两个主题,包括线程安全的基本概念,如何实现线程安全,以及如何在保证线程安全的同时进行性能优化。
23 0
|
20天前
|
存储 安全 Java
深入理解Java并发编程:线程安全与锁机制
【5月更文挑战第31天】在Java并发编程中,线程安全和锁机制是两个核心概念。本文将深入探讨这两个概念,包括它们的定义、实现方式以及在实际开发中的应用。通过对线程安全和锁机制的深入理解,可以帮助我们更好地解决并发编程中的问题,提高程序的性能和稳定性。