本篇内容主要讲解“为什么要让run()方法自动开启”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“为什么要让run()方法自动开启”吧!
cpu有随机性,线程抢到cpu,才能干活,所以run()方法必须通过strat()方法自动启动,这样cpu就获得了一个信号,知道该线程可以抢占cpu资源;
手动运行垃圾回收器
原理:当执行gc是,会触发垃圾回收机制,开启垃圾回收线程,执行finalize方法
cpu的特性:多个线程之间是抢cpu的关系,cpu有随机性
主函数结束,主任务区结束,主线程随着任务的结束而结束,线程随着任务的开始而开始
创建线程
默认情况下,主线程和垃圾回收线程都是由系统创建
①用Thread创建线程对象
Thread thread1=new Thread(); //只是创建Thread对象
thread1.start(); //开启线程
Thread类里的run()方法默认是空的,所以start()方法执行结果
所以需要继承Thread类 重写run()方法
若run()方法直接被手动调用,run()对应的线程跟调用该方法所在的线程对应
Thread类实现了Runnable接口,Runnable接口里面只有run()方法,Thread类里实现的run()方法也只是空方法体,需要被继承去重写
创建一个A类实现Runnable接口,重写run()方法
A a=new A();
Thread to=new Thread(A);
to.start();
给某个方法的线程冲突部分加锁
锁的条件
①锁必须是对象
②要被所有的线程共享
同步代码块
synchronized(this){代码块}
同步函数
非静态 public synchronized void xxx(){} //默认的锁是this synchronized(this)
静态 public synchronized static void xxx(){} //默认的锁是当前类的字节码文件 synchronized(xx.class)
notify(终止线程休眠) wait(线程休眠,不可以抢占cpu)
wait()-->必须在同步环境中使用,必须使用锁调用,执行这行代码,对应的是哪个线程,就
notify()-->唤醒的是同一把锁下的线程,
Lock(显示同步) 替换 Synchronized(隐式同步)
//创建锁对象 Lock lock=new ReentrantLock();
//用于生产任务的Condition
Condition proCon = lock.newCondition();
//用于结束任务的condition
Condition conCon = lock.newCondition();
//开启锁
lock.lock();
proCon.await();
conCon.signal();
conCon.await();
proCon.signal();
//关闭锁
lock.unlock();
守护线程
当程序调用setDaemon方法时,并且将参数设置成true,当前线程就变成了了守护线程,只要主线程结束,该守护线程就会结束,这个方法一定要在start前调用
join()方法,优先级高于主线程,主线程会等当前的线程执行完后再去执行;该方法是在start之后。
到此,相信大家对“为什么要让run()方法自动开启”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。