多线程基础学习
了解几个概念:
1. 进程:对于cpu来说就是正在执行的的一个独立的程序。(在宏观上来说是并发的,在微观上来说是串发的)
2. 线程:在一个进程内部的‘可以并发执行的多个函数’,一个进程可以有多个线程
注意:
1.每个进程都是独立的数据空间(是一个程序的执行流程)
2.线程生活在进程内部,他们是共享进程的空间的,线程是有操作系统(os)来维护的
JAVA创建线程的方式:
1.将方法类声明成Thread子类,子类重写Thread类和run方法。
如:
class ThreadA extends Thread {
Private String name;
Public ThreadA(String name) { this.name = name; }
Public void run() {
//具体代码
}
}
2.实现Runnable接口,然后实现run方法.然后创建该类的实例,在创建Thread时作为参数传递
如:
class ThreadB implements Runnable {
Public void run() {
//具体代码
}
}
具体实现如下:
Thread a = new ThreadA(“a”); //创建一个线程
a.start();//启动一个线程
Runnable r = new ThreadB(); //创建一个Runnable 实例r
Thread b = new Thread(r); //֯使用一个 Runnable 实例来创建线程
b.start(); //启动一个线程
总结:
1.java中线程就是一个类(Thread),实际的线程就是一个对象。
2.线程和线程对象不是一个概念,
Thread t = new Thread();
t代表了一个线程,也只是个线程对象,而不是线程,它可以到操作系统(OS)底层去初始话一个线程,即调用t.start()方法
3.Java虚拟机是一个虚拟进程,所有Java程序都是跑在此虚拟机进程上的线程,有OS来调度。
4.实际上Java程序上的main方法就是一个主线程,一旦运行一个Java程序,主线程就开始运行,所以有人说Java是基于线程运行的。
5.虚拟机进程要等到所在的非守护线程都结束了,才能结束。在Java虚拟机中有一个垃圾回收线程,就是守护线程。
6.再次声明实现,实现Runnable接口的类不是一个线程类,只是用它去构造一个线程对象。
7.线程,对象(线程对象),方法的关系
线程:哪个线程?
对象:哪个线程对象?
方法:哪个方法?
如:在main() 中创建了一个Thread类对象t,并调用t.start()。//表示:主线程对t线程对象调用了start()方法。
例子:
Public class TestThread {
Public static void main(String[] args) {
Thread t1 = new MyThread();
Runnable r = new YouThread();
Thread t2 = new Thread(r);
t1.start(); //启动t1线程
t2.start();//启动t2线程
// main 线程结束
}
Class MyThread extends Thread {
Public void run() {
For(int i=0;i<1000;i++)
System.out.println(“####“ );
}
}
Class YouThread implements Runnable {
Public void run() {
For(int i=0;i<1000;i++)
System.out.println(Ā̞̞̞” );
}
}
总结:上述例子中,主线程main方法就是为了启动t1和t2线程,在t2.start()后它就结束了,但可能t1,t2还在运行,所以进程不会退出。

浙公网安备 33010602011771号