进程:一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe就是一个进程。
线程:进程中的一个执行流程,一个进程中可以运行多个线程。比如java.exe进程中可以运行很多线程。线程总是属于某个进程,进程中的多个线程共享进程的内存空间,使得线程间的通信笔记比较容易。多线程指的是同时运行多个线程以执行不同任务。所谓同时,也依据cpu,多个并列执行,单个则根据系统情况决定,如通过时间片切换cpu的任务或抢占。
8.1 线程的创建
1、通过Runable接口的方式创建线程
Thread t = new Thread(runable对象);t.start();
runable对象是实现了这个接口的对象,当线程执行时会调用对象中的run()方法;
public class computer implements Runable{
public void run(){
}
}
public class test{
public static void main(String [] args){
Thread t = new Thread(new compuer());
t.start();
}
}
2、通过继承Thread类来创建线程,覆写run()方法
public class computer extends Thread{
public void run(){
}
}
public class test{
public static void main(String [] args){
computer c =new computer();
c.start();
}
}
8.2 线程的使用
线程的执行是一种抢占的方式,优先级高的获得更多的执行时间,可通过设置优先级来调整
public final void setPriority(int newPriority);值1-10级,默认5级
线程的休眠是指暂时处于一种等待状态。
public static native void sleep(long millis);
线程的唤醒是指从休眠等待状态进入执行状态
public static void interruput();
线程的让步指使当前正在运行的线程对象退出运行状态,让其他线程运行。
public static void yield();
线程的同步,线程的运行权通过抢占的方式获得,一个程序在运行到一半时,被别的线程抢占了,此时这个数据处理了一半,而另一个也是处理这个数据,结果混乱了。解决方法是同步块,另一种是同步方法
1、同步块:
同步块是使用某个对象监视点的线程,获得权限的一种方法。如几个人吃饭,只有一双筷子,这个筷子相当于童年不块的监视点。
synchronized(someobject){
.....
}
//someobject是一个监视对象,可以是实际的也可以是假
//设的(new Object())。
2、同步方法:同步方法就是对整个方法进行同步
synchronized void test(){
......
}