进程
定义:正在执行的一个程序。进程需要一定的资源(如CPU,内存,文件,I/O设备)来完成其任务,这些资源在创建进程或执行晋城市被分配。每个进程都有自己独立的一块内存空间。进程是大多是系统中的工作单元。
线程
定义:进程中执行的一条任务线。他们共享资源,每个线程都有自己的栈,程序计数器。
实现的方式:
1.编写一个类继承Thread,重写run方法,在主线程中用.start方法启动线程。
//run方法就是线程要执行的任务方法
//这个执行路径的触发方式,是调用start方法来启动一个线程
public void run(){
for(int i=0;i<10;i++){
System.out.println("锄禾日当午"+i);
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
/**继承thread
* */
// MyThread mt=new MyThread();
// mt.start();
}
第二种方法:实现Runnable接口,重写run方法,在主线程中用.start方法启动线程。
@Override
public void run() {
for(int i=0;i<10;i++){
System.out.println("汗滴禾下土"+i);
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
/ /1。创建一个任务对象
MyRunnable r=new MyRunnable();
//2。创建一个线程,并分配一个任务
Thread t=new Thread(r);
//3。启动线程
t.start();
第三种方法:实现Callable接口
class MyCallable implements Callable<Integer>{
@Override
public Integer call() throws Exception {
for(int i=0;i<10;i++){
Thread.sleep(100);
System.out.println(i);
}
return 100;
}
}
public static void main(String[] args) throws InterruptedException, ExecutionException {
Callable<Integer> c=new MyCallable();
FutureTask<Integer> task=new FutureTask<>(c);
new Thread(task).start();
Integer j= task.get();//如果用get方法,主线程先不参与,等获取到了值,才调用主线程
System.out.println(j);
for(int i=0;i<10;i++){
Thread.sleep(100);
System.out.println(i);
}
}
线程不安全问题:利用synchronized,锁机制