黑马程序员技术交流社区
标题:
java基础之线程1
[打印本页]
作者:
黑马的学员
时间:
2015-7-22 22:55
标题:
java基础之线程1
本帖最后由 黑马的学员 于 2015-7-22 22:58 编辑
线程是进程中一个负责程序执行的控制单元,一个进程中可以有多个线程叫做多线程,开启多个线程是为了同时进行多部分代码。每个线程都有自己的运行内容,这个内容称为线程要执行的任务。
如何创建一个线程?
其中一种方法就是继承Thread类
步骤:
(1)定义一个类继承Thread类
(2)覆盖Thread类中的run方法
run方法中定义的是线程要运行的任务代码,开启线程是为了运行指定代码,所以只有继承Thread类,并复写run方法,将运行的代码定义在run方法中即可。
(3)直接创建Thread的子类对象创建线程
(4)调用start方法开启线程并调用线程方法
简单代码如下:
class Demo1 extends Thread //定义一个类继承线程类Thread
{
private String name;//私有一个字符串引用 name
Demo1(String name)//构造函数对Demo1进行初始化并具有属性name
{
super(name);
//this.name=name;
}
public void run()//定义一个run函数来覆盖Thread
{
for(int x=0;x<10;x++)
{
for(int y=-100000;y<890980;y++){}
System.out.println(name+"....x="+x+"....name="+Thread.currentThread().getName());//输出里面调用了getName方法
}
}
}
class DemoThread
{
public static void main(String[] args)
{ Demo1 s1=new Demo1("小皓");//创建Thread子类对象
Demo1 s2=new Demo1("小静");
s1.start();//调用strat方法开启线程
s2.start();
for(int w=0;w<10;w++)
{
System.out.println("小胖子....w="+w+"....name="+Thread.currentThread().getName());
}
}
}
运行结果如下:
运行结果如下:
小胖子....w=0....name=main
小胖子....w=1....name=main
小胖子....w=2....name=main
null....x=0....name=小静
null....x=0....name=小皓
null....x=1....name=小静
小胖子....w=3....name=main
null....x=2....name=小静
null....x=1....name=小皓
null....x=3....name=小静
null....x=4....name=小静
null....x=5....name=小静
null....x=6....name=小静
null....x=7....name=小静
null....x=8....name=小静
null....x=9....name=小静
小胖子....w=4....name=main
小胖子....w=5....name=main
小胖子....w=6....name=main
小胖子....w=7....name=main
小胖子....w=8....name=main
小胖子....w=9....name=main
null....x=2....name=小皓
null....x=3....name=小皓
null....x=4....name=小皓
null....x=5....name=小皓
null....x=6....name=小皓
null....x=7....name=小皓
null....x=8....name=小皓
null....x=9....name=小皓
总结:
(1)线程运行有随机性,抢占cpu
(2)整个类去继承Thread只是为了覆盖run方法,有点浪费,并且java不支持多继承势必会造成局限性。
(3)如果多线程执行的是一个有总数的项目 比如多线程进行卖票,就会new出多个对象,每个对象都是独立的这种方法就不行了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2