Java多线程(一)基础

1.关于线程与进程的区别:线程指进程中的一个执行场景,也就是执行流程,同一个进程中的线程共享其进程中的内存和资源(共享的内存是堆内存和方法区内存,栈内存不共享,每个线程有自己的,一个线程一个栈。);每个进程是一个应用程序,都有独立的内存空间。多线程的使用是为了提高程序的使用率,而非T提高速度。
2.实现多线程的常见方式
a.继承Thread类

public class Test extends Thread {

	private String name;
	public Test(String name) {
		this.name = name;
	}
	public void run() {
		for(int i = 0; i < 7; i++)
			System.out.println(name + ":" + i);
	}
}
public class ThreadTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Test t1 = new Test("A");
		Test t2 = new Test("B");
		
		t1.start();
		t2.start();
	}

运行结果为
A:0
A:1
A:2
A:3
A:4
A:5
A:6
B:0
B:1
B:2
B:3
B:4
B:5
B:6
再次运行
B:0
B:1
B:2
B:3
B:4
A:0
B:5
B:6
A:1
A:2
A:3
A:4
A:5
A:6
注意:每个程序至少有两个线程,垃圾回收线程和主线程,线程调用 start() 方法后并非立即执行,而是进入可执行状态,具体什么时候执行由操作系统决定。
b.实现Runnable接口

public class RunnableTest implements Runnable {

	private String name;
	public RunnableTest(String name) {
		this.name = name;
	}
	@Override
	public void run() {
		// TODO Auto-generated method stub

		for(int i = 0; i < 7 ; i++) {
			System.out.println(name + ":" + i);
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Thread t1 = new Thread(new RunnableTest("A"));
		Thread t2 = new Thread(new RunnableTest("B"));
		t1.start();
		t2.start();
	}

}

运行结果不在展示
继承Thread与实现Runnable 相比,实现Runnable接口摒弃了只能单继承的缺点。
3.线程的状态:
a.新建状态 线程对象建立后即处于新建状态,通过 start() 方法进入就绪状态,但是要注意已经不能对已经 start的线程再次 start 否则会报错。
b.就绪状态。已经调用了 start() 方法但是还没被CPU抢到。
c.运行状态
d.阻塞状态
e.死亡状态
4.常用方法
a.sleep
会让线程阻塞设定的时间Thread.sleep(long millis);
b.线程让步:yield
yield只是让出自己正在执行的机会,进入到就绪状态,但是再次抢CPU资源的时候还是可能会执行刚才让出的线程。
c.join() : t.join()方法阻塞调用此方法的线程(calling thread),直到线程t完成,此线程再继续;通常用于在main()主线程内,等待其它线程完成再结束main()主线程。join方法必须在线程start方法调用之后调用才有意义。这个也很容易理解:如果一个线程都没有start,那它也就无法同步了。 其实,join方法是通过调用线程的wait方法来达到同步的目的的。例如,A线程中调用了B线程的join方法,则相当于A线程调用了B线程的wait方法,在调用了B线程的wait方法后,A线程就会进入阻塞状态。
d.setPriority(int newPriority) 更改线程的优先级。
e.getPriority() 返回线程的优先级。
注意: 每个线程都有一个优先级,我们也可以自己设置,但是优先级高的也并非一定先执行,只是他先执行的概率比较大而已。
f.interrupted 和 isInterrupted的区别:注意理解
iIaqR1.png

猜你喜欢

转载自blog.csdn.net/qq_43060759/article/details/83304774