进程是程序的一次动态执行过程
它经历了从代码加载、执行到执行完毕的一个完整过程
这个过程也是进程本身从产生、发展到最终消亡的过程
多进程操作系统能同时运行多个进程(程序),而由于CPU具备分时机制,所以每个进程都能循环获得自己的CPU时间片
由于CPU执行速度非常快,使得所有程序好像是在“同时”运行一样
进程与线程的区别多线程是实现并发机制的一种有效手段
进程和线程一样,都是实现并发的一个基本单位
线程是比进程更小的执行单位,是在进程的基础上进行的进一步划分
多线程是指一个进程在执行过程中可以产生多个更小的程序单元(即线程),这些线程可以同时存在、同时运行,而一个进程可能包含了多个同时执行的线程。
线程的实现 继承Thread类在Thread子类中,必须明确地覆写Thread类中的run()方法。此方法为线程的主体。
语法:
class 类名称 extends Thread{
属性...;
方法...;
public void run(){
线程主体;
}
}
package org.test;
class Test extends Thread{
public Test(){
}
public void run(){
for(int i=1;i<=5;i++) {
System.out.println(i);
}
}
}
public class Hello {
public static void main(String[] args) {
Test a1=new Test();
Test a2=new Test();
a1.run();
a2.run();
}
}
启动线程
package org.test;
class Test extends Thread{
private String name;
public Test(String name){
this.name=name;
}
public void run(){
for(int i=1;i<=5;i++) {
System.out.println(name+i);
}
}
}
public class Hello {
public static void main(String[] args) {
Test a1=new Test("a");
Test a2=new Test("b");
a1.start();
a2.start();
}
}
实现Runnable接口
public interface Runnable{
public void run();
}
语法:
class 类名称 implements Runnable{
属性...;
方法...;
public void run(){
线程主体;
}
}
package org.test;
class Test implements Runnable{
private String name;
public Test(String name){
this.name=name;
}
public void run(){
for(int i=1;i<=5;i++){
System.out.println(name+i);
}
}
}
public class Hello {
public static void main(String[] args) {
Test a1 = new Test("A");
Test a2 = new Test("B");
Thread t1=new Thread(a1);
Thread t2=new Thread(a2);
t1.start();
t2.start();
}
}
区别
继承Thread类不能资源共享
实现Runnable接口可以资源共享
Callable接口实现多线程接口定义格式:
public interface Callable{ public V call() throws Exception; }
package org.test; import java.util.concurrent.Callable; import java.util.concurrent.FutureTask; class Test implements Callable{ public String call() throws Exception{ for(int i=1;i<=5;i++) { System.out.println(i); } return "0"; } } public class Hello { public static void main(String[] args) throws Exception { Test a1=new Test(); Test a2=new Test(); FutureTask t1 = new FutureTask (a1); FutureTask t2 = new FutureTask (a2); new Thread(t1).start(); new Thread(t2).start(); } }
将Callable接口的子类利用FutureTask类实现包装。由于FutureTask是Runnable接口的子类,所以可以利用Thread类的start()方法启动多线程。当线程执行完毕,可以利用Future接口中的get()方法返回线程的执行结果。



