* 进程: 正在 进行中的程序
* 线程:就是进程中一个负责程序执行的控制单元(执行路径)
* 一个进程中可以有多个执行路径,称之为多线程。
*
* 一个进程中至少要有一个线程。
*
* 开启多个线程是为了同时运行多部分代码。
*
* 每一个线程都有自己运行的内容,这个内容可以成为线程要执行的任务。
*
第一种方法***********************************************
* 创建新执行线程有两种方法。一种方法是将类声明为 Thread 的子类。该子类应重写 Thread 类的 run 方法。接下来可以分配并启动该子类的实例。
*
* 步骤:
* 1.定义一个类继承Thread类。
* 2.覆盖Thread类中的run方法。
* 3.创建线程对象。
* 4.开启线程 (即调用 Thread的start()方法)
*
*/
public class ThreadTest
{
public static void main(String[] args)
{
/*
* 创建线程的目的是为了开启一条执行路径,去运行指定的代码和其他代码实现同时运行。
* 而运行的指定代码就是这个执行路径的任务。
* jvm创建的主线程的任务都是定义在 了主函数中。
*
* 而自定义的线程的任务。。。 Thread类用于描述线程,线程是需要任务的。所以Thread类也是任务的描述。
* 这个任务就是通过Thread类中的run方法来体现 的。也就是说。run方法 就是封装自定义线程运行任务的函数。
*
* run方法中定义的就是线程中要运行的任务代码。
*
* 开启线程是为了 运行 指定的代码,所以只有继承 Thread类,并重写run方法。
* 将运行的代码 定义在run方法中即可。。。。。。。
*/
//第三步: 创建线程类
Demo d1 = new Demo("杨超");
Demo d2 = new Demo("刘媛");
//第四步: 开启线程
d1.start();
d2.start();
}
}
//第一步 : 定义一个类继承Thread类
class Demo extends Thread
{
private String name;
Demo(String name)
{
this.name = name;
}
//第二步 : 覆盖Thread类中的run方法。
public void run()
{
for(int i=0; i<10; i++)
{
System.out.println(name+"....i="+i
);}
}
}
l
/*
* 创建线程的另一种方法是声明实现 Runnable 接口的类。该类然后实现 run 方法。
* 然后可以分配该类的实例,在创建 Thread 时作为一个参数来传递并启动
*
* 步骤:
* 1.定义类实现Runnable接口。
* 2.覆盖接口中的run方法,将线程的任务代码封装到run方法中。
* 3.通通过Thread类创建线程对象,并将Runnable接口的子类对象作为Thread类的构造函数的参数进行传递。
*
为什么?因为线程的任务都封装在 Runnable接口子类的run方法中。
*
所以要在线程对象创建时就必须明确要运行的任务。
* 4.调用线程对象的start方法开启线程。
*
* 实现Runnable接口的好处:
* 1.将线程的任务从线程的子类中分离出来了。进行了单独的封装。
*
按照面向对象的思想将任务封装成对象。
* 2.避免了java单继承的局限性。
* 所以 创建线程的第二种方式 即用实现接口的方法 较为常用。
*/
public class ThreadTest2
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
Dem d1 = new Dem();
Thread t1 = new Thread(d1);
t1.start();
}
}
class Dem implements Runnable//准备扩展类的功能,让其内容可以作为线程的任务执行。
//通过接口的形式完成。
{
@Override
public void run()
{
// TODO Auto-generated method stub
say();
}
public void say()
{
System.out.println();
}
}
l
通过调用Thread类的start()方法来启动一个线程,这时此线程是处于就绪状态,并没有运行。然后JVM通过此Thread类调用方法run()来完成其运行操作的,这里方法run()称为线程执行体,它包含了要执行的这个线程的内容,run方法运行结束,此线程终止,而CPU再运行其它线程,
2、run()方法当作普通方法的方式调用,程序还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码。
如果直接用run方法,这只是调用一个方法而已,程序中依然只有主线程,只有这一个线程,其程序执行路径还是只有一条,这样就没有达到写线程的目的。
版权声明:本文为博主原创文章,未经博主允许不得转载。