【多线程】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


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




目录
相关文章
|
2天前
|
Java 程序员 调度
Java中的多线程编程:概念、实现及性能优化
【5月更文挑战第85天】本文主要探讨了Java中的多线程编程,包括其基本概念、实现方式以及如何进行性能优化。首先,我们将介绍多线程的基本概念,然后详细讨论如何在Java中实现多线程,包括继承Thread类和实现Runnable接口两种方式。最后,我们将探讨一些提高多线程程序性能的策略,如使用线程池和减少同步开销等。
|
2天前
|
监控 Java 开发者
深入理解Java并发编程:线程池的原理与实践
【5月更文挑战第85天】 在现代Java应用开发中,高效地处理并发任务是提升性能和响应能力的关键。线程池作为一种管理线程的机制,其合理使用能够显著减少资源消耗并优化系统吞吐量。本文将详细探讨线程池的核心原理,包括其内部工作机制、优势以及如何在Java中正确实现和使用线程池。通过理论分析和实例演示,我们将揭示线程池对提升Java应用性能的重要性,并给出实践中的最佳策略。
|
1天前
|
安全 Java 开发者
掌握Java并发编程:线程安全与性能优化之道
在多核处理器普及的今天,充分利用并发编程技术是提升应用性能的关键。本文将深入探讨Java中的并发编程,从基本概念到高级技巧,揭示如何通过正确的同步机制和锁策略来确保线程安全,同时避免常见的并发陷阱。我们将一起探索高效利用线程池、减少锁竞争、以及使用现代并发工具类等方法,以达到性能的最优化。
|
3天前
|
安全 Java 数据处理
Java并发编程:线程同步与协作的深度解析
在探索Java并发编程的海洋中,线程同步与协作的灯塔指引着航向。本文将深入挖掘线程同步机制的核心原理,揭示锁、条件变量等工具如何确保数据的一致性和线程间有序的通信。通过案例分析,我们将解码高效并发模式背后的设计哲学,并探讨现代Java并发库如何简化复杂的同步任务。跟随文章的步伐,您将获得提升多线程应用性能与可靠性的关键技能。 【7月更文挑战第24天】
18 5
|
2天前
|
Java
如何在Java中实现线程池?
在Java中,线程池是高效管理线程的关键机制,避免了无限制创建线程的资源浪费和系统不稳定。通过`Executor`和`ExecutorService`接口,代码与具体线程池实现解耦,提供灵活性。`Executors`类简化线程池创建,适合基本需求
|
1天前
|
安全 Java 开发者
Java中的并发编程:深入理解线程池
在Java的并发编程中,线程池是管理资源和任务执行的核心。本文将揭示线程池的内部机制,探讨如何高效利用这一工具来优化程序的性能与响应速度。通过具体案例分析,我们将学习如何根据不同的应用场景选择合适的线程池类型及其参数配置,以及如何避免常见的并发陷阱。
4 1
|
2天前
|
Java
如何在Java中实现多线程的Socket服务器?
在Java中,多线程Socket服务器能同时处理多个客户端连接以提升并发性能。示例代码展示了如何创建此类服务器:监听指定端口,并为每个新连接启动一个`ClientHandler`线程进行通信处理。使用线程池管理这些线程,提高了效率。`ClientHandler`读取客户端消息并响应,支持简单的文本交互,如发送欢迎信息及处理退出命令。
|
3天前
|
Java
如何使用jstack命令查看Java进程的线程栈
如何使用jstack命令查看Java进程的线程栈?
11 2
|
5天前
|
监控 Java
Java并发编程:深入理解线程池
在Java并发编程领域,线程池是提升应用性能和资源管理效率的关键工具。本文将深入探讨线程池的工作原理、核心参数配置以及使用场景,通过具体案例展示如何有效利用线程池优化多线程应用的性能。
|
3天前
|
Java 开发者
Java 并发编程之深入理解线程池
在Java并发编程的世界中,线程池扮演着至关重要的角色。本文将深入探讨线程池的内部机制、使用场景以及如何合理配置线程池参数以优化性能。我们将通过实际案例和统计数据,分析线程池对于提升应用性能的具体影响,并讨论在不同应用场景下选择合适线程池策略的重要性。文章旨在为Java开发者提供关于线程池的全面理解和实践指导,帮助其在多线程编程中做出更明智的决策。