首页 > 代码库 > J2SE基础:13.多线程编程

J2SE基础:13.多线程编程

1:进程和线程




进程:运行一个程序,程序在内存分配了运行空间。在内存起了一个进程。

线程:在进程中运行。多个线程之间可以进行相互的切换。

主线程

子线程:子线程都是从主线程中分配出来的。


2:主线程的重要性。




3:在Java中创建多线程




1:继承Thread类:

2:实现Runable接口:

继承Thread类与实现Runable接口的区别:

Java只支持单继承,一旦一个类继承了Thread类的话,就不能再继承其它的类了。




4:Seleep方法



5:Thread.join方法:一个线程如果join了另一个线程,那么这个线程就必须等另一个线程


                    的run方法运行结束(线程结束)。====调方法






   Thread.yield方法:让出CPU的资源,让其它的线程执行。


   Thread.setPriority():设置线程的优先级。优先级,CPU调度的时间也就越长。
                          Max = 10
 Normal = 5
 Min = 0;
 取值范围在0---10之间即可。


   Thread.seleep():线程的休眠。与yield不同的,它是休眠。可以被唤醒。




停止线程的方法:

以前老的实现方式

stop/destory方法。会引起死锁(结合迭代器与集合的方式理解死锁)

现在新的方式:


6:为什么要使用线程同步:


A:当多个线程同时访问一个资源时,会造成资源数据的不同步。因此要对资源加锁。



这一加锁的过程,就是在线程并发时,只有一个线程能够访问到该资源。因此叫做



线程的同步。





7:锁的概念


8:到底锁什么:

锁住当前方法(当前变量)所在的对象和类。





synchronized(同步)

asynchronized(异步)



9:怎么实现线程同步:

A:方法同步。



B:代码块同步:



方法同步与代码块同步的区别:



方法同步:锁住当前方法所在的对象。因此执行整个方法直到完成,一直锁住当前对象。



代码块同步:对象的锁只在执行synchronized这一部分的代码块。其它的代码块也会出

现线程同步的问题。





synchronized (this) {

count = count + 1;

try {

Thread.sleep(2000);

} catch (Exception e) {

e.printStackTrace();

}

System.out.println("当前线程=" + Thread.currentThread().getName()

+ ",Count值  =" + count);

}

System.out.println(count);



10:锁的粗粒度:

锁的粗粒度只能在代码块同步中更改锁的大小。方法的同步的是没有办法更改的。



11:线程之间的协作:

wait();/notify();



J2SE基础:13.多线程编程