@java笔记
原来对多线程理解不多,所以整理笔记加深多多线程的理解,同时也方便日后的学习、复习!!希望可以共同交流,一起进步!
首先看一下线程与进程的区别(在java面试或者android面试中经常会问到这些问题):
1.CPU负责整个计算机的处理工作(它就像一个工厂);
2.一个CPU一次只能运行一个任务(当我们这个工厂的电或者原料不充足时,只能供一厂房运行),而进程代表该工厂的一个厂房,代表CPU所能运行的单个任务(CPU在任何时刻都只运行一个进程);
3.一个进程包含很多线程 (就像一个车间里有很多工人一样,而进程就是车间的工人);
4.线程共享车间的空间(就像我们在工作时,在这个车间我们可以来回走动,也可以更换我们的工作地点);
5.而在我们使用某些存储空间时,其他工人就得等我们使用完(比如我们在卫生间时,其他人必须等我们使用完他们才可以用)
6.为了防止其他人使用我们一般都会上锁(在火车上我们一般都会上锁,使用完后会给别人一个信号灯提示),这就是“锁”,防止多个线程公用同一个存储区域
7.有的房间也可以让多个人同时操作假如人数为M,但是当人数大于M时我们就必须禁止其他人进入这个区域,我们也会上锁(这就是我们要讲的多线程)
为什么使用多线程? 为了工作效率!!!
线程从创建到结束会经历创建(new)、就绪(runnable)、运行(running)、阻塞(blocked)、time waiting、waiting、消亡(dead)
线程运行时当然也会有多种状态time waiting(睡眠或等待一定的事件)、waiting(等待被唤醒)、blocked(阻塞)
用一个简单的例子来说明Thread
public class ThreadDemo extends Thread{
public class Score(){
}
public class Score(String Num){
this.Num=Num;
}
public void run() {
for (int i = 0; i < 3; i++) {
System.out.println(name + "=" + i);
}
}
public static void main(String[] args) {
Score s1=new Score("A");
Score s2=new Score("B");
s1.run();
s2.run();
}
}
运行结果:
【运行结果】:
A= 0
A=1
A= 2
B= 0
B=1
B= 2