---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------
1.线程简述
进程:正在进行中的程序
线程:就是进程中一个负责程序执行的控制单元
一个进程中可以有多条执行路径,称之为多线程
一个进程中至少要有一个线程
开启多个线程是为了同时运行多部分代码
每一个线程都有自己运行的内容。这个内容可以称为线程要执行的任务。
多线程好处:解决了多部分同时运行的问题。
多线程的弊端:线程太多回到效率的降低。
其实应用程序的执行都是cpu在做着快速的切换完成的,这个切换是随机的。
JVM启动时就启动了多个线程,至少有两个线程可以分析的出来。
1,执行main函数的线程,
该线程的任务代码都定义在main函数中。
2,负责垃圾回收的线程。
2.创建线程方法之一继承Thread类
如何创建一个线程呢?
创建线程方式一:继承Thread类。
定义一个类继承自Thread类,
然后覆盖Thread类中的run()方法,
然后创建此类的对象调用start()方法开启此线程
class Demo extends Thread {
private String name;
Demo(String name) {
super(name);
// this.name = name;
}
public void run() {
for (int x = 0; x < 10; x++) {
// for(int y=-9999999; y<999999999; y++){}
System.out.println(name + "....x=" + x + ".....name="
+ Thread.currentThread().getName());
}
}
}
class ThreadDemo2 {
public static void main(String[] args) {
Thread t1 = new Thread();
Demo d1 = new Demo("旺财");
Demo d2 = new Demo("xiaoqiang");
// 开启线程,调用run方法。
d1.start();
d2.start();
System.out.println("over...." + Thread.currentThread().getName());
}
}
run方法就是封装自定义线程运行任务的 函数。run方法中定义就是线程要运行的任务代码。
开启线程是为了运行指定代码,所以只有继承Thread类,
并复写run方法。将运行的代码定义在run方法中即可。
3.创建线程方法之二实现Runnable接口
定义一个类实现Runnable的接口,实现接口中的run()方法,将线程的任务代码封装到run()方法中
创建Thread类的线程对象,将Runnable接口的子类对象作为Thread类的构造参数进行传递
因为线程的任务都封装在Runnable接口子类对象的run()方法中,所以要在线程对象创建时就必须明确要运行的任务
调用线程对象的start()方法开启线程
实现Runnable接口有什么好处??
将线程的任务从线程的子类分离出来,进行单独封装按照面向对象的思想将任务封装成对象,
避免了java单继承的局限性,所以这种方法比较常用
class Demo implements Runnable// extends Fu //准备扩展Demo类的功能,让其中的内容可以作为线程的任务执行。
// 通过接口的形式完成。
{
public void run() {
show();
}
public void show() {
for (int x = 0; x < 20; x++) {
System.out.println(Thread.currentThread().getName() + "....." + x);
}
}
}
class ThreadDemo {
public static void main(String[] args) {
Demo d = new Demo();
Thread t1 = new Thread(d);
Thread t2 = new Thread(d);
t1.start();
t2.start();
// Demo d1 = new Demo();
// Demo d2 = new Demo();
// d1.start();
// d2.start();
}
}
---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------