1.进程和线程
进程:是一个正在执行中的程序。
每一个进程执行都有一个执行顺序。该顺序是一个执行路径,或者叫一个控制单元。
线程:就是进程中的一个独立的控制单元,是比进程更小的执行单位。线程只是一种为单一处理器分配执行时间的手段,
线程在控制着进程的执行。
一个进程中至少有一个线程。
2.什么是多线程?
多线程是指一个进程在执行过程中可以产生多个线程,这些线程可以同时存在,同时运行,一个进程可能包含了多个同时执行的线程。如,迅雷下载,可以下载多个任务,就是多线程。
3.创建多线程的第一种方式:继承Thread类。
(1)定义类继承Thread类
(2)覆写Thread 类中的run()方法
目的:将自定义代码存储在run方法,让线程运行。
(3)调用线程的start方法。该方法有两个作用:启动线程,调用run方法
package org.lxh.demo9.threaddemo;
class MyThread extends Thread
{
private String name;
public MyThread(String name) //通过构造方法设置属性内容
{
this.name =name;
}
public void run(){ //覆写Thread类中的run()方法
for (int i=0;i<10;i++)
{
System.out.println(name+"运行,i="+i);
}
}
}
public class ThreadDemo2 {
public static void main(String[] args) {
MyThread mt1= new MyThread("线程A"); //创建好了一个线程
MyThread mt2= new MyThread("线程B");
mt1.start(); //启动多线程,并执行该线程的run方法,若用mt1.run();仅仅是对象调用方法,而线程创建了,并没有运行。等到把run方法执行完了,再执行下一个。
mt2.start(); //启动多线程
}
}
4.sleep()和wait()比较
对于sleep()方法,我们首先要知道该方法是属于Thread类中的。而wait()方法,则是属于Object类中的。
sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监控状态依然保持着,当指定的时间到了又会自动恢复运行状态。
在调用sleep()方法的过程中,线程不会释放对象锁。
而当调用wait()方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定池准备
获取对象锁进入运行状态。
原文:http://www.cnblogs.com/GumpYan/p/5743496.html