我们之前所学的程序都是单线程的,都是按照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会切换线程。
创建线程方法二:
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();
}
}
第二种方法更常用。。。