——什么是线程?
我们现在所用的系统windows,就是一个支持线程的操作系统。我们在使用windows时如果打开任务管理器→进程,就可以看到,管理器中有一个一个的进程,进程是由代码、数据、内核状态和一组寄存器组成的,而线程是由表示程序运行状态的寄存器以及堆栈组成,线程不包含进程地址空间中的代码和数据,线程是计算过程在某一时刻的状态。
简单点说。
一条条的线程,组成了一个进程。系统在产生一个线程或者在各个不同线程中切换的时候要比在进程中切换轻松的多,就像我们一次搬运100公斤重的东西和一次搬运10公斤的东西一样。所以线程也被称为小进程。
程序与进程,线程。线程最小,进程次。
——多线程。
我们现在用电脑,边听着歌,边玩游戏。或者边看电影,边聊天。这些就是多线程做到的,它能让你同时去做更多的事情。想一下,如果只有一个线程,看电影就不能聊天,聊天就不能玩游戏,看电影。
说是多线程,其实不是真正意义上的多线程同时运行,它实际上是由处理器(cpu)把每个线程分成了不同段,每个执行一点,然后切换。
比如abcd四个线程。把abcd再各分四个(a1a2a3a4,b1b2b3…d3d4)处理器执行0.1秒的a1再切换到b1执行0.1秒,再切换到c1,d1。然后这样循环。
这只是打个比喻。具体怎么去分配那是处理器的事,不是我们该管的。我们只需要明白它实际上是每件事做一点,让你觉得是在同时执行就可以了。或者更简单点说就是,你聊天看电影,它会在两个里面快速的切换以保证它们能够同时运行。所以理论上说,处理器越多,处理速度就越快。一群人干活总比一个人快的多吧。
————————————————————————————————————我是分割线————————————————————————————————————
——创建线程
Thread thread=new MyThreadClass();
1.Thread类
public Thread(ThreadGroup group,Runnable target,String name);
group——指明线程所属的线程组
target——提供线程体对象(run)
name——线程名(name为null则会自动分配名称(唯一))
2.Runnable接口
public class ThreadTest{
public static void main(String[] args){
Thread t1=new Thread(new Hello());
Thread t2=new Thread(nwe Hello());//创建两个thread的对象
t1.start();
t2.start();
}
}
Claiss Hello implement Runnable{
int i;
while(true){
system.out.println("Hello"+i++);//i自加用来提示输出次数
if(i==3) { //因为i会自加,所以不会造成死循环
break;
}
}
}
输出结果是:
Hello0
Hello1
Hello2
Hello0
Hello1
Hello2
//创建了2个对象,所以输出也是两个。
——线程的生命周期
线程的生命周期分为
新建状态——可运行状态——运行状态——阻塞状态——终止状态
——java中支持线程的类
java.lang.Thread //通过继承thread类来定义自己的线程,也可以用runnable接口。
java.lang.Runnable //Runnable接口类,目的是使任何类都可以为线程提供线程体run();方法。
java.lang.Object //根类,定义了线程同步与交互方法
java.lang.ThreadGroup//实现线程组
java.lang.ThreadDeath//一般用于杀死线程
——Thread类的一些方法
_setName()
public final void setName(String name),把线程的名字改为name。
_getName()
public final String getName()返回线程名字
_activeCount()
public static int activeCount().返回当前线程的线程组中活动线程的个数
_getThreeGroup()
public final ThreeGroup getThreadGroup(),返回当前线程所属的线程组名。终止的线程返回null
_setDaemon()
public final void setDaermon(boolean on),线程启动前调用。设置当前线程为Daemon线程。
_isDaemon()
public final boolean isDaemon(),测试线程是否为daemon线程 返回值为boolean型
_toString()
public String toString()返回小爱你吃的一字符串形式表达的信息,包括线程的名字、优先级、线程组。
_enumerate()
public static int enumerate(Thread[] tarray) 当前线程的线程组中活动线程复制到tarray线程组中(包括子线程)。
_checkAccess()
public final void checkAccess()
t.checkAccess()确定当前线程是否允许访问另一个线程t
有可能抛出SecurityException异常。