Java中创建多线程的方式有哪些

Java中创建多线程的方式有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

成都创新互联专注于市中网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供市中营销型网站建设,市中网站制作、市中网页设计、市中网站官网定制、小程序定制开发服务,打造市中网络公司原创品牌,更为您提供市中网站排名全网营销落地服务。

线程和进程的区别

**进程:**正在运行的程序,例如:你打开 的qq音乐.exe程序,其由PCB(进程控制块)、栈、程序、数据组成。

线程:是一个进程中的程序代码的一个执行序列,被认为是带有自己的程序代码和数据的虚拟处理机的封装,其由处理机、代码、数据三部分组成,你可以这样理解线程是在进程内部同时做的事情,比如你在qq音乐应用里可以一边听音乐、同时下载音乐。这就是由多线程来实现的。(一个进程至少包含一个或者多个线程)

<!-- more -->

注意:

  1. 每个Java程序都有一个隐含的主线程,即main()方法,要实现多线程必须在主线程中创建新的线程,Java语言使用Thread类及其子类的对象来表示线程;

  2. 一个虚拟处理机封装在java.lang.Thread类中,它控制着整个线程的运行;CPU执行的代码传递给Thread类,由Thread类控制顺序执行;处理的数据传递给Thread类,是在代码执行的过程中所要处理的数据。代码和数据可以由多个线程共享,也可以不被共享,代码和数据是相互独立的,当两个线程共享同一个类的实例时,他们就共享相同的代码;当两个线程共享一个公共对象的存取时,他们就共享相同的数据。

线程的生命周期

一个线程从它被创建到停止执行要经历一个完整的生命周期,在这个生命周期中有4种不同的状态。

①New(新) ②Runnable(可运行) ③Blocked(被阻塞) ④Dead(死亡)

创建线程的三种方式

通过继承Thread类

package thread;

public class ThreadTest extends Thread{
	
	String threadName;
	
	public ThreadTest1(String s){
		System.out.println("Making thread:"+s);
		threadName = s;
	}
	
	public void run(){
		for( int i = 0; i &lt; 3; i++ ){
			System.out.println("Running thread number =" + threadName);
			try {
				Thread.sleep(1000); //线程睡眠1秒
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
	//主线程,操作系统调度每个线程执行
	public static void main(String[] args){
		
		ThreadTest1 thread1 = new ThreadTest1("Tom"); //线程1Tom
		ThreadTest1 thread2 = new ThreadTest1("Jack"); //线程2Jack
		
		/**线程启动,不是直接调用 run() 方法,而是调运线程类 Thread 的 start() 方法,
		*在 Thread 方法内部会调用本地系统方法,最终会自动调用自己线程类的 run()方法。
		**/
		thread1.start(); 
		thread2.start();
		System.out.println("End of main");
	}
}

运行截图

Java中创建多线程的方式有哪些

通过实现Runnable接口

package thread;

public class ThreadTest implements Runnable{
	
	String threadName;
	
	public ThreadTest(String s){
		System.out.println("Making thread:"+s);
		threadName = s;
	}
	
	public void run(){
		for( int i = 0; i &lt; 3; i++ ){
			System.out.println("Running thread number =" + threadName);
			try {
				Thread.sleep(1000); //让线程睡眠1秒
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
	//主线程,操作系统调度每个线程执行
	public static void main(String[] args){
		
		//创建线程Tom和线程Jack
		Thread thread1 = new Thread(new ThreadTest("Tom")); 
		Thread thread2 = new Thread(new ThreadTest("Jack")); 
		
		/**线程启动,不是直接调用 run() 方法,而是调运线程类 Thread 的 start() 方法,
		*在 Thread 方法内部会调用本地系统方法,最终会自动调用自己线程类的 run()方法。
		**/
		thread1.start(); 
		thread2.start();
		System.out.println("End of main");
	}

}

运行截图

Java中创建多线程的方式有哪些

通过实现Callable接口

package thread;

import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;

public class ThreadTest implements Callable<integer>{
	
	String threadName;
	
	public ThreadTest(String s) {
		System.out.println("Making thread:"+s);
		threadName = s;
	}

	@Override
	public Integer call() throws Exception {
		int sum = 0;
		// TODO Auto-generated method stub
		for( int i = 0; i &lt; 5; i++ ){
			System.out.println(threadName+i);
			sum += i;	
		}
		return sum;
	}
	
	public static void main(String args[]){
		
		//创建两个线程,并且启动
		ThreadTest threadTest1 = new ThreadTest("Tom");
		ThreadTest threadTest2 = new ThreadTest("Jack");
		
		FutureTask<integer> result1 = new FutureTask&lt;&gt;(threadTest1);
		new Thread(result1).start();
		
		
     	FutureTask<integer> result2 = new FutureTask&lt;&gt;(threadTest2);
		new Thread(result2).start();
	}

}

运行截图

Java中创建多线程的方式有哪些

线程类型分类

java中线程一共有两种类型,守护线程和用户线程,用户线程又叫非守护线程。

  • 守护线程

可以通过thread.setDaemon(true)方法设置线程是否为守护线程,thread.setDaemon(true)必须在thread.start()之前设置,否则会抛出IllegalThreadStateException异常。在守护线程中开启的新线程也是守护线程。守护线程顾名思义是用来守护的,是给所有的非守护线程提供服务的,所以在JVM执行完所有的非守护线程后,JVM就会停止,守护线程也不在运行,最典型的守护线程就是java的垃圾回收机制(GC)。

  • 非守护线程

java线程默认设置为非守护线程thread.setDaemon(false)。当主线程运行完之后,只要主线程里有非守护线程JVM就互惠退出,直到所有的非守护线程执行完之后JVM才会退出。、

> 总结:如果把一个线程设置成守护线程,则JVM的退出就不会关心当前线程的执行状态。 </integer></integer></integer>

看完上述内容,你们掌握Java中创建多线程的方式有哪些的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!

分享题目:Java中创建多线程的方式有哪些
本文路径:https://www.cdcxhl.com/article44/jchhee.html

成都网站建设公司_创新互联,为您提供关键词优化微信小程序移动网站建设企业建站定制开发服务器托管

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

外贸网站建设