大家好,我是爱动漫更爱编程的小工同学~
认识线程 概念
优点一个线程就是一个"执行流",每个线程之间都可以按照顺序执行自己的代码,多个线程之间“同时”执行者多份代码。
进程和线程的区别可以实现并发编程。
虽然多线程也能实现 并发编程 但是线程比进程更轻量
创建线程比创建进程更快。
销毁线程毕晓辉进程更快。
调度线程比调度进程更快。
线程的创建进程是包含线程的,每一个进程至少有一个存在,即主线程。
进程和进程之间不共享内存空间,同一个进程的线程之间共享同一个内存空间
进程是系统分配资源的最小单位,线程是系统调度的最小单位。
1、继承Thread类,重写run方法Thread和Runnable的区别2、实现Runnable接口,重写run方法 public class MyThread { public static class cc extends Thread { @Override public void run() { System.out.println("hello java"); } } public static void main(String[]args) { cc t=new cc(); t.run(); } }
3、使用匿名内部类创建子类对象public class MyThread { public static class cc implements Runnable { @Override public void run() { System.out.println("hello Java"); } } public static void main(String[] args) { new Thread(new cc()).start(); } }
// 使用匿名类创建 Thread子类对象 Thread t1 = new Thread(){ @Override public void run() { System.out.println("使用匿名类创建 Thread 子类对象"); } }); //使用匿名类创建 Runnable子类对象 Thread t2 = new Thread(new Runnable() { @Override public void run() { System.out.println("使用匿名类创建 Runnable 子类对象"); } });
如果一个类继承Thread,则不适合资源共享。但是如果实现了Runable接口的话,则很容易的实现资源共享。
总结:
实现Runnable接口比继承Thread类所具有的优势:
1):适合多个相同的程序代码的线程去处理同一个资源
2):可以避免java中的单继承的限制
3):增加程序的健壮性,代码可以被多个线程共享,代码和数据独立
4):线程池只能放入实现Runable或callable类线程,不能直接放入继承Thread的类
补充:start()作用是把线程加入到就绪队列中,等待被调度器选中才能执行。
线程的优先级线程的分类Thread类中设置和获取线程优先级的方法
1、public final getPriority()返回线程的优先级
2、public fina voidsetPriority(int newPriority 更改此线程的优先级
线程默认优先级是5,线程优先级范围为:1--10
线程优先级高仅代表线程获取CPU时间片的几率高
线程的生命周期Java中的线程分为两类:1、守护线程(垃圾回收线程,异常处理线程)2、用户线程(主线程)
用户线程:主要负责交互工作
守护线程:负责支持工作
如果守护线程全部退出,JVM也退出
常用的线程方法
🚀每日一图sleep()
它不能改变对象的锁。所以当在一个Synchronized方法中调用sleep()时,线程虽然休眠了,但是对象的机锁没有被释放,其他线程仍然无法访问这个对象。
1、主要作用让当前线程休眠,休眠时间结束后会自动醒来进入就绪状态
2、sleep()方法没有释放锁,其他线程
3、sleep()必须捕获异常
4、sleep可以在任何地方使用
wait()
会在线程休眠的同时释放掉机锁,其他线程可以访问该对象。
1、属于Object,一旦一个对象调用了wait()方法,必须要采用notify和notifyAll()方法唤醒该进程。
2、wait()释放了锁。
3、wait()不需要捕获异常
4、wait(),notify()和notyfyAll智能在同步控制方法或者同步控制块里面使用。
yield()
停止当前进程,让同等优先权的线程运行,如果没有同等优先权的线程,那么yield()方法将不会起作用
join()
等待一个线程完成它的工作后,才能进行下一个线程的 *** 作
notify
唤醒再次对象监视器上的等待的单个线程,如果所有线程都在等待,则随机选一个线程
notifyAll()
唤醒在此对象监视器上等待的所有线程。线程通过调用其中一个
wait
方法,在对象的监视器上等待。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)