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


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




目录
相关文章
|
21小时前
|
安全 Java 调度
Java线程:深入理解与实战应用
Java线程:深入理解与实战应用
7 0
|
5天前
|
安全 Java
深入理解 Java 多线程和并发工具类
【4月更文挑战第19天】本文探讨了Java多线程和并发工具类在实现高性能应用程序中的关键作用。通过继承`Thread`或实现`Runnable`创建线程,利用`Executors`管理线程池,以及使用`Semaphore`、`CountDownLatch`和`CyclicBarrier`进行线程同步。保证线程安全、实现线程协作和性能调优(如设置线程池大小、避免不必要同步)是重要环节。理解并恰当运用这些工具能提升程序效率和可靠性。
|
5天前
|
安全 Java
java多线程(一)(火车售票)
java多线程(一)(火车售票)
|
6天前
|
安全 Java 调度
Java并发编程:深入理解线程与锁
【4月更文挑战第18天】本文探讨了Java中的线程和锁机制,包括线程的创建(通过Thread类、Runnable接口或Callable/Future)及其生命周期。Java提供多种锁机制,如`synchronized`关键字、ReentrantLock和ReadWriteLock,以确保并发访问共享资源的安全。此外,文章还介绍了高级并发工具,如Semaphore(控制并发线程数)、CountDownLatch(线程间等待)和CyclicBarrier(同步多个线程)。掌握这些知识对于编写高效、正确的并发程序至关重要。
|
6天前
|
安全 Java 程序员
Java中的多线程并发编程实践
【4月更文挑战第18天】在现代软件开发中,为了提高程序性能和响应速度,经常需要利用多线程技术来实现并发执行。本文将深入探讨Java语言中的多线程机制,包括线程的创建、启动、同步以及线程池的使用等关键技术点。我们将通过具体代码实例,分析多线程编程的优势与挑战,并提出一系列优化策略来确保多线程环境下的程序稳定性和性能。
|
6天前
|
缓存 分布式计算 监控
Java并发编程:深入理解线程池
【4月更文挑战第17天】在Java并发编程中,线程池是一种非常重要的技术,它可以有效地管理和控制线程的执行,提高系统的性能和稳定性。本文将深入探讨Java线程池的工作原理,使用方法以及在实际开发中的应用场景,帮助读者更好地理解和使用Java线程池。
|
7天前
|
存储 安全 Java
Java中的容器,线程安全和线程不安全
Java中的容器,线程安全和线程不安全
15 1
|
7天前
|
Java 开发者
Java中多线程并发控制的实现与优化
【4月更文挑战第17天】 在现代软件开发中,多线程编程已成为提升应用性能和响应能力的关键手段。特别是在Java语言中,由于其平台无关性和强大的运行时环境,多线程技术的应用尤为广泛。本文将深入探讨Java多线程的并发控制机制,包括基本的同步方法、死锁问题以及高级并发工具如java.util.concurrent包的使用。通过分析多线程环境下的竞态条件、资源争夺和线程协调问题,我们提出了一系列实现和优化策略,旨在帮助开发者构建更加健壮、高效的多线程应用。
7 0
|
14天前
|
存储 Java 数据库连接
java多线程之线程通信
java多线程之线程通信
|
25天前
|
存储 缓存 NoSQL
Redis单线程已经很快了6.0引入多线程
Redis单线程已经很快了6.0引入多线程
31 3

热门文章

最新文章