当前位置: 首页 > news >正文

滁州网站开发公司电话微网站自己怎么做

滁州网站开发公司电话,微网站自己怎么做,做淘宝客没网站吗,宁德市医院东侨院区Java线程 文章目录 Java线程一、线程创建二、线程运行三、线程运行四、主线程和守护线程五、线程的五种状态六、线程的六种状态七、烧水泡茶案例 一、线程创建 创建线程方法一#xff1a; Thread重写run方法 Slf4j(topic c.MyTest1) public class MyTest1 {publ…Java线程 文章目录 Java线程一、线程创建二、线程运行三、线程运行四、主线程和守护线程五、线程的五种状态六、线程的六种状态七、烧水泡茶案例 一、线程创建 创建线程方法一 Thread重写run方法 Slf4j(topic c.MyTest1) public class MyTest1 {public static void main(String[] args) {Thread tnew Thread(){Overridepublic void run() {log.info(好人);}};t.setName(线程1);t.start();log.info(main测试);} }创建方法2: 直接写一个Runable传给线程Thread Slf4j(topic c.Test2) public class Test2 {public static void main(String[] args) {Runnable r () - {log.debug(running);};Thread t new Thread(r, t2);t.start();} }Thread和Runable的区别 Thread实现了Runable方法也就是说Thread可以覆盖Runable的任务方法执行run。但是也可以通过传入任务来执行对应的Runable方法(如下面代码所示)。 Overridepublic void run() {if (target ! null) {target.run();} } 创建方法3: FutureTask实现了Runnable和FutureFuture主要是用来返回值的。其实相当于也是一个任务类但是需要实现Callable实现类对象传入到task上。并且执行之后才能够使用task的get来获取数据如果没有执行线程那么get就会阻塞 Slf4j(topic c.MyTest2) public class MyTest2 {public static void main(String[] args) throws ExecutionException, InterruptedException {FutureTaskInteger tasknew FutureTaskInteger(new CallableInteger() {Overridepublic Integer call() throws Exception {log.debug(你好);return 4;}});Thread tnew Thread(task,t1);t.start();log.debug({},task.get());} }总结:更推荐方法2原因是Runable就是任务把任务和线程分开才能更好的分配任务。 二、线程运行 命令 jps:查看java进程 tasklist:windos查看所有进程 taskkill /F /PID XXX杀死某个进程 三、线程运行 线程的栈 每次开启一个线程都会产生一个线程的栈给线程使用实际上就是一开始分配的虚拟机栈。 每个栈都有多个栈帧 线程只能有一个活动栈帧 线程执行的过程 先分配栈给线程线程调用main方法在栈分配一个栈帧给main方法栈帧保存锁记录、局部变量表、操作数栈、返回地址返回到原来的栈帧方法的下一条指令 线程上下文切换 导致上下文切换的条件 时间片用完 优先级 垃圾回收 自己调用sleep、wait等 线程的状态包括 程序计数器记录执行到什么位置 虚拟机栈包括所有栈帧信息 常见方法 start 线程进入就绪状态等待调度器调用。这里相当于是开启了一个新的线程 run 执行Runnable里面的方法。这里并没有开启线程只是通过本线程执行代码 如果开启了两次start就会出现线程状态异常的问题IlegalThreadStateException 线程的两个状态 NEW start之后就是Runnable等待调度 sleep 线程睡眠并把状态改为Timed Waiting被打断的时候会抛出异常InterruptedException。可以通过TimeUnit.SECONDS.sleep来规定睡眠时间的单位。睡眠可以使用在while循环自转的地方如果长时间自转就会消耗CPU的使用时间其他线程无法使用 interrupt 唤醒线程如果线程处于睡眠状态那么就会抛出异常 public static void main(String[] args) throws InterruptedException {Thread t1 new Thread(t1) {Overridepublic void run() {log.debug(enter sleep...);try {Thread.sleep(2000);} catch (InterruptedException e) {log.debug(wake up...);e.printStackTrace();}}};t1.start();Thread.sleep(1000);log.debug(interrupt...);t1.interrupt();}yield 其实就是把线程状态从Running转变到Runnable暂时让出cpu重新去竞争 setPriority 设置优先级是给调度器进行提示先执行这个线程但是仍然没有办法控制线程。 join join实际上就是卡点就是一定要等待调用join的线程完成后才能执行下面的代码 Slf4j(topic c.Test10) public class Test10 {static int r 0;public static void main(String[] args) throws InterruptedException {test1();}private static void test1() throws InterruptedException {log.debug(开始);Thread t1 new Thread(() - {log.debug(开始);sleep(1);log.debug(结束);r 10;},t1);t1.start();t1.join();log.debug(结果为:{}, r);log.debug(结束);} }同步应用案例 多线程的join只需要等待最长的那个线程就可以了因为它们是并行执行的。 test3案例实际上就是限时等待如果超过时间那么就不等了。如果没有超过时间那么结束join还是以处理完线程的任务时间为主而不是最大的等待时间 Slf4j(topic c.TestJoin) public class TestJoin {static int r 0;static int r1 0;static int r2 0;public static void main(String[] args) throws InterruptedException {test2();}public static void test3() throws InterruptedException {Thread t1 new Thread(() - {sleep(2);r1 10;});long start System.currentTimeMillis();t1.start();// 线程执行结束会导致 join 结束log.debug(join begin);t1.join(3000);long end System.currentTimeMillis();log.debug(r1: {} r2: {} cost: {}, r1, r2, end - start);}private static void test2() throws InterruptedException {Thread t1 new Thread(() - {sleep(1);r1 10;});Thread t2 new Thread(() - {sleep(2);r2 20;});t1.start();t2.start();long start System.currentTimeMillis();log.debug(join begin);t1.join();log.debug(t1 join end);t2.join();log.debug(t2 join end);long end System.currentTimeMillis();log.debug(r1: {} r2: {} cost: {}, r1, r2, end - start);}private static void test1() throws InterruptedException {log.debug(开始);Thread t1 new Thread(() - {log.debug(开始);sleep(1);log.debug(结束);r 10;});t1.start();t1.join();log.debug(结果为:{}, r);log.debug(结束);} }interrupt 打断阻塞 打断sleep和wait。打断后会抛出异常到那时不会给它打上打断标记。而且这里需要给主线程睡眠一会不然t1线程还没睡眠主线程就已经调用打断那么这个时候的打断是打断t1并且加上打断标记但是打断睡眠并不会有打断标记 Slf4j(topic c.Test11) public class Test11 {public static void main(String[] args) throws InterruptedException {Thread t1 new Thread(() - {log.debug(sleep...);try {Thread.sleep(5000); // wait, join} catch (InterruptedException e) {e.printStackTrace();}},t1);t1.start();Thread.sleep(1000);log.debug(interrupt);t1.interrupt();log.debug(打断标记:{}, t1.isInterrupted());} }打断正常 当我们打断的事正常的线程没在sleep或wait那么就会给这个线程加上打断标记。但是要不要打断取决于被打断线程的意愿其它线程只能给一个通知。 Slf4j(topic c.Test12) public class Test12 {public static void main(String[] args) throws InterruptedException {Thread t1 new Thread(() - {while(true) {boolean interrupted Thread.currentThread().isInterrupted();if(interrupted){break;}}}, t1);t1.start();Thread.sleep(1000);log.debug(interrupt);t1.interrupt();} }LockSupport 其实就是一个锁的支持类它的park方法可以模拟sleep把线程进行阻塞但是需要标记是false的时候。如果打断标记是true那么就无法使用。但是这个地方可以使用Thread.interrupted来获取打断标记状态和消除标记。 public static void test5() {Thread t1 new Thread(()-{log.debug(park...);LockSupport.park();log.debug(unpark...);log.debug(打断状态{}, Thread.interrupted());LockSupport.park();log.debug(unpark...);},t1);t1.start();try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}t1.interrupt();}四、主线程和守护线程 守护线程其实就是Daemon。也就是在其它非守护线程运行完之后无论守护线程是否还有任务需要执行都会强制停止。 垃圾回收器是守护线程 tomcat的Acceptor和poller Slf4j(topic c.Test15) public class Test15 {public static void main(String[] args) throws InterruptedException {Thread t1 new Thread(() - {while (true) {if (Thread.currentThread().isInterrupted()) {break;}}log.debug(结束);}, t1);t1.setDaemon(true);t1.start();Thread.sleep(1000);log.debug(结束);} }五、线程的五种状态 1、初始new线程的时候 2、可运行执行了start 3、运行线程可以使用cpu的时候 4、阻塞不能被cpu调度器使用的时候 5、终止线程结束的时候 六、线程的六种状态 NEW:初始化 RUNNABLE:包括了运行、可运行和阻塞通常表示正在运行 WAITING没有时间限制的等待 TIMED_WAITING:有时间限制的等待 BLOCKED:阻塞 TERMINATED:终止 七、烧水泡茶案例 join思路 其实就是老王洗烧壶和烧水小王洗茶壶、茶杯、茶叶等待烧水完成之后泡茶。可以用join来等待t1处理。 Slf4j(topic c.Test16) public class Test16 {public static void main(String[] args) {Thread t1 new Thread(() - {log.debug(洗茶壶);Sleeper.sleep(1);log.debug(烧水);Sleeper.sleep(5);}, 老王);Thread t2new Thread(()-{log.debug(洗茶壶);Sleeper.sleep(1);log.debug(洗茶叶);Sleeper.sleep(2);log.debug(洗茶杯);Sleeper.sleep(1);try {t1.join();} catch (InterruptedException e) {e.printStackTrace();}log.debug(泡茶);},小王);t1.start();t2.start();} }
http://www.dnsts.com.cn/news/117623.html

相关文章:

  • 松江网站开发培训学校网络监控软件
  • 合肥seo网站多少钱wordpress图片宽度
  • 哪个网站有做视频转场的素材私有云可以做网站
  • 网站开发绑定微信qq注册上海注册公司需要多久
  • 站酷网站源码东莞网络营销网络推广系统
  • 最好的网站开发平台如何快速网站排名
  • 网站设计项目建设内容郑州营销网站建设公司
  • 公司网站公司哪家好网站侧导航
  • 长沙市住房和城乡建设局网站南京 网站建设模板价格
  • 学习做网站需要多久免费网页设计成品网站
  • 教做鞋的网站兴宁市住房和城乡建设部网站
  • 可以做哪些网站网站可以做的线下活动
  • 江津网站建设方案网站百度搜索情况和反链接优化建议
  • 崔各庄地区网站建设推广赚钱软件排行
  • 引物在线设计网站营销型网站建设有哪些
  • 要建设一个网站需要什么手续律师事务所在线咨询免费
  • 网站建设花都域名购买哪个网站最好
  • 中国建设网官方网站硅灰网站开发类型什么意思
  • 谷歌做网站社区电商平台排行榜
  • 一起做英语作业网站如何做网站备案
  • 网站建设 壹起航技术培训平台
  • 沧州做网站多少钱怎么设计logo用什么软件
  • 网站首页设计多少钱舆情查询
  • wordpress子目录 多站点wordpress 文章浏览数排列
  • asp古典网站源码分销订单管理系统
  • 层次结构分明的网站配色方案网站建设用户需求
  • jsp环保主题网站代做南桥做网站
  • 深圳市建设行业主管部门官方网站如何查网站死链
  • 深圳全网营销网站建设睢宁县建设工程招标网
  • 有没有专业做淘宝网站论坛型网站怎么做的