Java线程基本原理及操作

线程是什么?

线程是进程内的执行单元。因为进程的转换往往需要耗费很大的资源,所以线程的引入加大了程序的运行速度。现在的进程只作为资源的拥有者,而线程作为资源的调度和分配的基本单元。


线程的基本操作:

新建线程:

Thread t1 = new Thread(); 

Thread t2 = new Thread(new Runnable());


线程启动:

t1.start(); 启动的是线程内的run()方法,所以我们的代码都要在run()方法里进行重写。


线程终止:

Thread.stop() 不推荐使用,它会释放掉所有的monitor


线程中断:

public void Thread.interrupt()      //中断线程

public boolean Thread.isInterrupted()     //判断线程是否被中断

public static boolean Thread.interrupted    //判断线程是否被中断,并清除当前中断状态


线程运行:

Thread.join()    //等待线程结束再运行,在有多个线程时,需要考虑到数据执行

Thread.yeild()    //谦让,释放当前资源,并重新参与竞争

Thread.sleep(time)    //休眠time时间,不释放资源,等待time时间结束后继续运行


守护线程:

Thread t =new DaemonT();

t.setDaemon(true);

t.start()

//守护线程为jvm控制,如垃圾回收线程,JIT线程等,当程序内只有守护线程时,Java虚拟机就会自然退出


线程优先级:

public final static int MIN_PRIORITY = 1;

public final static int NORM_PRIORITY = 5;

public final static int MAX_PRIORITY = 10;

Thread t1 = new Thread();

t1.setPriority(Thread.MAX_PRIORITY);


线程的同步操作:

syschronized

--指定加锁对象:对给定对象加锁,进入同步代码前要获得给定对象的锁。

--直接作用于实例方法:相当于对当前实例加锁(即 new一个另外的实例无效),进入同步代码前要获得当前实例的锁。

--直接作用于静态方法:相当于对当前类加锁(即new一个新的实例同样有效),进入同步代码前要获得当前类的锁。


Object.wait()        //线程等待,注意即使被唤醒后在进入线程前要获得相应的对象锁。

Object.notify()    //随机唤醒在当前对象所等待的一个线程,假如执行唤醒操作后,还是没有释放当前的对象的话(比如执行了sleep操作        ),被唤醒的线程也同样执行不了,因为无法获取到相应的对象锁。

Object.notifyAll()    //唤醒所有在当前对象上等待的线程,再让他们去竞争这个对象锁。

猜你喜欢

转载自blog.csdn.net/weixin_39797865/article/details/80457834
今日推荐