【1】了解进程与线程的概念
- 进程是一个程序在其自身的地址空间中执行一次活动,是资源申请、调度和独立运行的单位。
- 线程是进程中的一个单一的连续控制流程,一个进程可以包含一个或多个线程。
- 如果要在一个程序中实现多段代码同时交替运行,就需要产生多个线程,并指定每个线程上要运行的程序代码段,这就是多线程。
- 当程序运行时,就自动产生了一个线程,主函数main就是在这个线程上运行的,当不再产生新的线程时,程序就是单线程的。例如,在的博客中本文——“JAVA——package语句、class环境变量配置”中的程序就是单线程的。
【2】实现多线程的两种方法
- 当启动程序时就自动产生了一个线程,主函数main就是在这个线程上运行的。当不再产生新的线程时,程序就是单线程的。
- 通过查阅JDK文档的Thread类,可以发现创建多线程有两种方法:继承Thread类、实现Runable接口。
翻译:每个线程都有优先级。优先级较高的线程优先执行具有较低优先级的线程。每个线程可能也可能被标记为守护进程。当代码运行在某个线程中创建一个新的线程对象时,新线程的优先级初始设置为创建线程的优先级,当且仅当创建线程为守护进程时,该线程是一个守护线程。 - 守护线程与非守护线程的相关内容,可参见网址:
http://www.cnblogs.com/super-d2/p/3348183.html JAVA中的线程是通过java.lang.Thread类来控制的,一个Thread类的对象代表一个线程,且只能代表一个线程,通过Thread类和它定义的对象,可以获取当前线程对象、获取某一线程的名称,可以实现控制线程暂停一段时间等功能。
第一种创建线程的方法:继承Thread类
两种方法的示例为:例如,一个计算大于给定值的素数的线程可以写成如下。
方法步骤总结:
(1)定义一个类(如PrimeThread)继承Thread;
(2)重写Thread类中的run方法,将需要被多线程执行的代码存储到该run方法当中。
(3)建立Thread类的子类创建线程对象。
(4)直接调用子类从Thread类继承的start方法,开启一个线程(调用该线程的run方法)。第二种创建线程的方法:实现Runable接口
Thread类有一个Thread(Runnable target)构造方法,在Runable接口类中只有一个run()方法。当使用Thread(Runnable target)方法创建线程对象时,需要为该方法传递一个实现 Runnable接口的对象,这样创建的线程将调用那个实现了Runnable接口类对象中的run()方法作为其运行代码,而不再是调用Thread类中的run方法了。
方法步骤总结:
(1)定义一个类(如PrimeRun)实现Runnable接口,覆盖Runnable接口中的run方法,将线程要运行的代码存放在该run方法中;
(2)通过Thread类建立线程对象,将Runnable接口的子类实例对象作为实际参数传递给Thread类的构造方法。两种方式区别:
(1)继承Thread: 线程代码存放Thread子类run方法中,且该run方法被调用。
</
(2)实现Runnable:线程代码存在实现了Runnable类接口的对象的run方法中,且该run方法被调用。