黑马程序员-江远云 我的java语言基础之路5-多线程篇

来源:互联网 发布:微信服务号域名是什么 编辑:程序博客网 时间:2024/05/20 03:37

---------------------- android培训、java培训、期待与您交流! ----------------------


创建线程 -继承Thread类
让多条代码同时执行,自定义一个线程。进程真正创造是系统帮你创建的,线程也是系统帮你创建的
核心包lang包中有个Thread类,就是执行线程
创建方式:一是将类继承Thread,成为我小弟,事情就办好了。要先搞一个子类,通过对API的查找,JAVA已经提供了对线程这类事物的描述,就是Thread
创建线程的第一种方式:继承Thread类。继承完以后,就要创建一个对象,其实你建立好一个对象,就创建好一个线程,接着复写Thread的run方法,调用线程的start方法
这方法有两个作用:启动线程,调用run方法。主线程先执行,是虚拟机开启的,到这里,就有一个新的单位被创建,哥们到这就多了一个执行路径,于是他也开动了,这时,主线程也还在执行
发现运行结果每一次都不同,因为多个线程都在获取cpu的执行权,cpu执行到谁,谁就运行,明确一点,在某一时刻,只能有一个程运行。(多核除外)。cpu在做着快速的切换,以达到看上去是同时运行的效果
我们可以把多线程的运行行为在互相抢夺cpu的执行权,这就是多线程的特性:随机性,谁抢到谁执行,执行多长时期是cpu说的算


创建线程 -run和start特点
要让某些代码起到同时运行的效果,Thread类用于描述线程,这类就定义了一个功能,用于存存储线程要运行的代码,这存储功能就是run方法
线程提供了一个空间。也就是Thread类中的run方法,用于存储纯种要运行的代码。虚拟机定义的。存在main里边就是主线程了
沿袭父类功能,把你的功能复写掉,建立起自己的代码。复写run方法目的是将自定义代码存储在run方法,让线程运行,start是开线程的run方法,run仅仅是对象调用方法,而线程创建了,并没有运行。Thread调用到低层,run只封装代码。


线程运行状态
常见四种状态,第一种状态是被创建,new一个对象就是一个线程,运行,休息,挂了,阻塞,有资行资格,没有执行权,被抢了。


获取线程对象以及名称
线程也有自己的名称,找线程对象的方法,因为它最熟悉,线程都有自己默认的名称。Thread-编号。


创建线程的第二种方式:实现Runnable接口。


步骤:
1,定义了实现Runnable接口。
2,覆盖接口的run方法。将多线程要运行的代码存入其中。
3,创建Thread类的对象(创建线程),并将Runnable接口的子类对象作为参数传递给Thread的构造函数。
为什么要传递?因为线程要运行的代码都在Runnable子类的run方法中存储。所以要将该run方法所属的对象
传递给Thread。让Thread线程去使用该对象调用其run方法。
4,调用Thread对象的start方法。开启线程。


建议使用实现方式,因为避免了单继承的局限性,所以创建线程建议使用第二种方式。


class Ticket implements Runnable
{
private  int tick = 100;
public void run()
{
while(true)
{
if(tick>0)
{
System.out.println(Thread.currentThread().getName()+"....sale : "+ tick--);
}
}
}
}




class  TicketDemo
{
public static void main(String[] args) 
{


Ticket t = new Ticket();


Thread t1 = new Thread(t);
Thread t2 = new Thread(t);
Thread t3 = new Thread(t);
Thread t4 = new Thread(t);
t1.start();
t2.start();
t3.start();
t4.stsra();
}
}



---------------------- android培训、java培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net/heima

原创粉丝点击