本篇内容主要讲解“为什么要让run()方法自动开启”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“为什么要让run()方法自动开启”吧!
成都创新互联是创新、创意、研发型一体的综合型网站建设公司,自成立以来公司不断探索创新,始终坚持为客户提供满意周到的服务,在本地打下了良好的口碑,在过去的10年时间我们累计服务了上千家以及全国政企客户,如成都茶艺设计等企业单位,完善的项目管理流程,严格把控项目进度与质量监控加上过硬的技术实力获得客户的一致赞赏。
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()方法自动开启”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!