Java学习 多线程的创建

我们之前所学的程序都是单线程的,都是按照main函数这一条线索执行。这样在有些环境下就显得比较笨拙。

这样引进了多线程,如其名,多个线程就是多条线索。

提到线程就不得不提到进程。

我们可以把进程想像成应用程序比如听歌软件,线程就是里面的功能,听歌软件功能实现 需要依附于听歌软件,线程一样需要依附于进程。单线程相当于听歌软件打开后只能听歌,多线程相当于是边听歌边找歌曲。


java支持多线程,java提供了Thread类

创建线程方法一:

创建Thread的子类,并且覆盖Thread的run方法,然后通过start来启动进程

例子:

class ThisThread extends Thread
{
	private String name;
	ThisThread(String name)
	{
		this.name = name;
	}
	public void run()        //需要覆盖Thread中的此方法 run方法就是多线程要执行的代码
	{
		
		for(int x = 0;x<20;x++)
		{
			for(int y = 0;y<999999999;y++)    //内部两个for循环为了延时显示
			{
				for(int z = 0;z<9;z++)
				{
					
				}
			}
			System.out.println(this.name+"..."+x);
		}
	}
}

public class Demo
{
	public static void main(String[] args) 
	{
		ThisThread t = new ThisThread("线程1...");        //创建线程t
		ThisThread t2 = new ThisThread("线程2...");        //创建进程t2
		t.start();                                          //调用start来启动进程 jvm会调用run函数
		t2.start();
	}

}

结果:

线程1......0
线程2......0
线程1......1
线程2......1
线程1......2
线程2......2
线程2......3
线程1......3
线程2......4
线程1......4
线程2......5
线程1......5
线程2......6
线程1......6
线程2......7
线程1......7
线程2......8
线程1......8
线程2......9
线程1......9
线程2......10
线程1......10
线程2......11
线程1......11
线程2......12
线程1......12
线程2......13
线程1......13
线程2......14
线程1......14
线程2......15
线程1......15
线程2......16
线程1......16
线程2......17
线程1......17
线程2......18
线程1......18
线程2......19
线程1......19

线程之间交错进行,CPU会切换线程。

扫描二维码关注公众号,回复: 2581093 查看本文章


创建线程方法二:

1,创建一个类,让其实现Runnable接口,这个接口中只有一个方法run(),我们将需要放在新线程运行的代码放在run中

,2,创建自定义类的对象

3,创建Thread对象,Thread的构造函数中有一个Thread(Runnable target)我们使用这个进行传参

4,运行Thread对象的start函数。

class RThread implements Runnable
{
	
	public void run()
	{
		show();
	}
	public void show()
	{
		for(int x = 0;x<30;x++)
		{
			for(int y = 0;y<999999;y++)
			{
				
			}
			System.out.println("num..."+x+"..."+Thread.currentThread().getName());
		}
	}
}
public class Demo
{
	public static void main(String[] args) 
	{
		RThread rt1 = new RThread();
		Thread t1 = new Thread(rt1);
		Thread t2 = new Thread(rt1);
		t1.start();
		t2.start();
	}

}
第二种方法更常用。。。

猜你喜欢

转载自blog.csdn.net/goddreamyyh/article/details/80639257