Java单线程与多线程

1.什么是线程?

在我们了解单线程和多线程之前,我们必须搞清楚什么是进程
一个运行起来的程序就是一个进程!
那程序又是什么呢?
对程序的通俗定义就是:一段可执行的代码。
当我们执行一段Java程序时,就在java虚拟机(JVM)中形成了一个进程,一个进程可以包括多个线程。而单线程就是进程的一个基本运行单位。JVM通过在程序中执行main()方法,形成一个线程(主线程)。当main()方法结束后,JVM进程也随之结束。
我们平常执行的java程序大多是单线程程序。

2.什么是多线程?

之前提到过,一个进程可以包括多个线程,顾名思义,多线程就是多个单线程的集合!
通俗来说,单线程就是一个人做一件事,多线程是多个人做同一件事。

3.为什么要实现多线程?

对于多个单线程的进程来说,它们之间的内存块是相互独立的,这样进程之间的通信很不方便;但是对于一个多线程的进程来说,新开辟的线程并不分配新的内存空间,而是与原来的线程共享内存空间,这样,线程之间的通信很方便,程序执行速度更快。

4.如何实现多线程?

Java当中实现多线程的基本方法有两种:继承java.long.Thread类或java.long.Runnable接口
其中,java.long.Thread类是继承java.long.Runnable接口而来的。
继承Thread类:我们通过继承Thread类,重写其中的 run()方法实现多线程。但在main()方法中我们不能直接调用run()方法,而是通过调用start()方法来间接调用run()方法。代码如下

public class DoubleThread extends Thread{
	
	public Process pro;              //*声明Process对象*
	public static void main(String [] args) {
		
		Process pro=new Process(1);
		//*循环生成多个线程*
		for(int i=0;i<=10;i++)
		{
			DoubleThread dt=new DoubleThread(pro);     
			dt.start();                  //*调用start方法*
		}
	}
	public DoubleThread(Process p) {
		this.pro=p;
	}
	public void run()               //*重写run方法*
	{
		while(pro.i<=20)
		{
			pro.i++;
			System.out.println(Thread.currentThread()+"i="+pro.i);      	
		}
	}
}

Process类如下

public class Process {
	public int i;
	public Process(int i) {
		this.i=i;
	}
}

继承java.long.Runnable接口
Attention:如果自己的主函数类已经继承一个类,就无法再继承 Thread,必须继承接口Runnable,此时必须重写所有方法;代码如下`

package Thread2;

import Thread.Process;
public class DThread implements Runnable{
/*
   *      如果自己的类已经继承一个类,就无法再继承 Thread,必须继承接口Runnable,此时必须重写所有方法;
 */
	public Process pro;
	public static void main(String [] args) {
		
		Process pro=new Process(1);
		for(int i=0;i<=10;i++)
		{
			DThread dt=new DThread(pro);
			/*
			 *  实例化一个Thread类对象 用于接受自己创建的类
			 * 传入一个Runnable target对象后 Thread的run方法就会调用target的run方法
			 */		
			Thread th=new Thread(dt);
			th.start();		
		}
	}
	public DThread(Process p) {
		this.pro=p;
	}
	public void run() {
		while(pro.i<=20)
		{
			pro.i++;
			System.out.println(Thread.currentThread()+"i="+pro.i);		
		}		
	}

此外,我们还可以这样来写:

new Thread(new Runnable(){
		public void run() {
			while(pro.i<=20)
			{
				pro.i++;
				System.out.println(Thread.currentThread()+"i="+pro.i);	
			}
		}}).start();

版权声明:本文为weixin_44569845原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。