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

沈阳高端做网站建设网络优化工程师面试题

沈阳高端做网站建设,网络优化工程师面试题,自己怎么开发网站,公司网站怎样维护运营创建和运行线程 方法一#xff0c;直接使用 Thread // 创建线程对象 Thread t new Thread() {public void run() {// 要执行的任务}};// 启动线程 t.start();例如#xff1a; // 构造方法的参数是给线程指定名字#xff0c;推荐 Thread t1 new Thread(t1) …创建和运行线程 方法一直接使用 Thread // 创建线程对象 Thread t new Thread() {public void run() {// 要执行的任务}};// 启动线程 t.start();例如 // 构造方法的参数是给线程指定名字推荐 Thread t1 new Thread(t1) {Override// run 方法内实现了要执行的任务 public void run() {log.debug(hello);}};t1.start();方法二使用 Runnable 配合 Thread 把【线程】和【任务】要执行的代码分开 Thread 代表线程Runnable 可运行的任务线程要执行的代码 Runnable runnable new Runnable() {public void run(){// 要执行的任务}};// 创建线程对象 Thread t new Thread( runnable );// 启动线程 t.start(); 例如 // 创建任务对象 Runnable task2 new Runnable() {Overridepublic void run() {log.debug(hello);}};// 参数1 是任务对象; 参数2 是线程名字推荐 Thread t2 new Thread(task2, t2);t2.start();方法三FutureTask 配合 Thread FutureTask 能够接收 Callable 类型的参数用来处理有返回结果的情况 // 创建任务对象 FutureTaskInteger task3 new FutureTask(() - {log.debug(hello);return 100;});// 参数1 是任务对象; 参数2 是线程名字推荐 new Thread(task3, t3).start();// 主线程阻塞同步等待 task 执行完毕的结果 Integer result task3.get();log.debug(结果是:{}, result);观察多个线程同时运行 windows 任务管理器可以查看进程和线程数也可以用来杀死进程 tasklist 查看进程taskkill 杀死进程 linux ps -fe 查看所有进程ps -fT -p (PID) 查看某个进程PID的所有线程kill 杀死进程top 按大写 H 切换是否显示线程top -H -p (PID) 查看某个进程PID的所有线程 Java jps 命令查看所有 Java 进程jstack (PID) 查看某个 Java 进程PID的所有线程状态jconsole 来查看某个 Java 进程中线程的运行情况图形界面 jconsole 远程监控配置 需要以如下方式运行你的 java 类 java -Djava.rmi.server.hostnameip地址 -Dcom.sun.management.jmxremote Dcom.sun.management.jmxremote.port连接端口 -Dcom.sun.management.jmxremote.ssl 是否安全连接 Dcom.sun.management.jmxremote.authenticate是否认证 java类修改 /etc/hosts 文件将 127.0.0.1 映射至主机名 如果要认证访问还需要做如下步骤 复制 jmxremote.password 文件修改 jmxremote.password 和 jmxremote.access 文件的权限为 600 即文件所有者可读写连接时填入 controlRole用户名RD密码 原理之线程运行 Java Virtual Machine Stacks Java 虚拟机栈 我们都知道 JVM 中由堆、栈、方法区所组成其中栈内存是给谁用的呢其实就是线程每个线程启动后虚拟机就会为其分配一块栈内存。 每个栈由多个栈帧Frame组成对应着每次方法调用时所占用的内存每个线程只能有一个活动栈帧对应着当前正在执行的那个方法 线程上下文切换Thread Context Switch 因为以下一些原因导致 cpu 不再执行当前的线程转而执行另一个线程的代码线程的 cpu 时间片用完垃圾回收有更高优先级的线程需要运行线程自己调用了 sleep、yield、wait、join、park、synchronized、lock 等方法 当 Context Switch 发生时需要由操作系统保存当前线程的状态并恢复另一个线程的状态Java 中对应的概念就是程序计数器Program Counter Register它的作用是记住下一条 jvm 指令的执行地址是线程私有的 状态包括程序计数器、虚拟机栈中每个栈帧的信息如局部变量、操作数栈、返回地址等Context Switch 频繁发生会影响性能 常见方法 方法名static功能说明注意start()启动一个新线程在新的线程运行 run 方法中的代码start 方法只是让线程进入就绪里面代码不一定立刻运行CPU 的时间片还没分给它。每个线程对象的start方法只能调用一次如果调用了多次会出现 IllegalThreadStateExceptionrun()新线程启动后会调用的方法如果在构造 Thread 对象时传递了 Runnable 参数则线程启动后会调用 Runnable 中的 run 方法否则默认不执行任何操作。但可以创建 Thread 的子类对象来覆盖默认行为join()等待线程运行结束join(long n)等待线程运行结束,最多等待 n毫秒getId()获取线程长整型的 idgetName()获取线程名setName(String)修改线程名getPriority()获取线程优先级setPriority(int)修改线程优先级java中规定线程优先级是1~10 的整数较大的优先级能提高该线程被 CPU 调度的机率getState()获取线程状态Java 中线程状态是用 6 个 enum 表示分别为NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATEDinterrupted()打断线程如果被打断线程正在 sleepwaitjoin 会导致被打断的线程抛出 InterruptedException并清除打断标记 如果打断的正在运行的线程则会设置 打断标记 park 的线程被打断也会设置打断标记interrupted()static判断当前线程是否被打断会清除打断标记isInterrupted()判断是否被打断不会清除打断标记isAlive()线程是否存活还没有运行完毕currentThread()static获取当前正在执行的线程sleep(long n)static让当前执行的线程休眠n毫秒休眠时让出 cpu的时间片给其它线程yield()static提示线程调度器让出当前线程对CPU的使用主要是为了测试和调试 start 与 run 调用 run public static void main(String[] args) {Thread t1 new Thread(t1) {Overridepublic void run() {log.debug(Thread.currentThread().getName());FileReader.read(Constants.MP4_FULL_PATH);}};}t1.run();log.debug(do other things ...)输出 19:39:14 [main] c.TestStart - main19:39:14 [main] c.FileReader - read [1.mp4] start ...19:39:18 [main] c.FileReader - read [1.mp4] end ... cost: 4227 ms19:39:18 [main] c.TestStart - do other things ...程序仍在 main 线程运行FileReader.read() 方法调用还是同步的 调用 start 将上述代码的 t1.run() 改为 t1.start(); 输出 19:41:30 [main] c.TestStart - do other things ...19:41:30 [t1] c.TestStart - t119:41:30 [t1] c.FileReader - read [1.mp4] start ...19:41:35 [t1] c.FileReader - read [1.mp4] end ... cost: 4542 ms程序在 t1 线程运行FileReader.read() 方法调用是异步的 sleep 与 yield sleep 调用 sleep 会让当前线程从 Running 进入 Timed Waiting 状态阻塞其它线程可以使用 interrupt 方法打断正在睡眠的线程这时 sleep 方法会抛出睡眠结束后的线程未必会立刻得到执行建议用 TimeUnit 的 sleep 代替 Thread 的 sleep 来获得更好的可读性 yield InterruptedException 调用 yield 会让当前线程从 Running 进入 Runnable 就绪状态然后调度执行其它线程具体的实现依赖于操作系统的任务调度器 线程优先级 线程优先级会提示hint调度器优先调度该线程但它仅仅是一个提示调度器可以忽略它如果 cpu 比较忙那么优先级高的线程会获得更多的时间片但 cpu 闲时优先级几乎没作用 Runnable task1 () - {int count 0;for (;;) {System.out.println(----1 count);}};Runnable task2 () - {int count 0;for (;;) {// Thread.yield();System.out.println( ----2 count);}};Thread t1 new Thread(task1, t1);Thread t2 new Thread(task2, t2);// t1.setPriority(Thread.MIN_PRIORITY);// t2.setPriority(Thread.MAX_PRIORITY);t1.start();t2.start();join 方法详解 为什么需要 join 下面的代码执行打印 r 是什么 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.start();log.debug(结果为:{}, r);log.debug(结束);}分析 因为主线程和线程 t1 是并行执行的t1 线程需要 1 秒之后才能算出而主线程一开始就要打印 r 的结果所以只能打印出 解决方法 用 sleep 行不行为什么用 join加在 t1.start() 之后即可 interrupt 方法详解 打断 sleepwaitjoin 的线程 这几个方法都会让线程进入阻塞状态 打断 sleep 的线程, 会清空打断状态以 sleep 为例 private static void test1() throws InterruptedException {Thread t1 new Thread(()-{sleep(1);}, t1);t1.start();}sleep(0.5);t1.interrupt();log.debug( 打断状态: {}, t1.isInterrupted())输出 java.lang.InterruptedException: sleep interruptedat java.lang.Thread.sleep(Native Method)at java.lang.Thread.sleep(Thread.java:340)at java.util.concurrent.TimeUnit.sleep(TimeUnit.java:386)at cn.itcast.n2.util.Sleeper.sleep(Sleeper.java:8)at cn.itcast.n4.TestInterrupt.lambda$test1$3(TestInterrupt.java:59)at java.lang.Thread.run(Thread.java:745)21:18:10.374 [main] c.TestInterrupt - 打断状态: false打断正常运行的线程 打断正常运行的线程, 不会清空打断状态 private static void test2() throws InterruptedException {Thread t2 new Thread(()-{while(true) {Thread current Thread.currentThread();boolean interrupted current.isInterrupted();if(interrupted) {log.debug( 打断状态: {}, interrupted);break;}}}, t2);t2.start();sleep(0.5);t2.interrupt();}输出 20:57:37.964 [t2] c.TestInterrupt - 打断状态: true 打断 park 线程 打断 park 线程, 不会清空打断状态 private static void test3() throws InterruptedException {Thread t1 new Thread(() - {log.debug(park...);LockSupport.park();log.debug(unpark...);log.debug(打断状态{}, Thread.currentThread().isInterrupted());}, t1);t1.start();sleep(0.5);t1.interrupt();}输出 21:11:52.795 [t1] c.TestInterrupt - park... 21:11:53.295 [t1] c.TestInterrupt - unpark... 21:11:53.295 [t1] c.TestInterrupt - 打断状态true如果打断标记已经是 true, 则 park 会失效 主线程与守护线程 默认情况下Java 进程需要等待所有线程都运行结束才会结束。有一种特殊的线程叫做守护线程只要其它非守护线程运行结束了即使守护线程的代码没有执行完也会强制结束. log.debug(开始运行...);Thread t1 new Thread(() - {log.debug(开始运行...);sleep(2);log.debug(运行结束...);}, daemon);// 设置该线程为守护线程 t1.setDaemon(true);t1.start();sleep(1);log.debug(运行结束...);输出 08:26:38.123 [main] c.TestDaemon - 开始运行... 08:26:38.213 [daemon] c.TestDaemon - 开始运行... 08:26:39.215 [main] c.TestDaemon - 运行结束...五种状态 是从 操作系统 层面来描述的 【初始状态】仅是在语言层面创建了线程对象还未与操作系统线程关联【可运行状态】就绪状态指该线程已经被创建与操作系统线程关联可以由 CPU 调度执行 【运行状态】指获取了 CPU 时间片运行中的状态 当 CPU 时间片用完会从【运行状态】转换至【可运行状态】会导致线程的上下文切换 【阻塞状态】 如果调用了阻塞 API如 BIO 读写文件这时该线程实际不会用到 CPU会导致线程上下文切换进入【阻塞状态】等 BIO 操作完毕会由操作系统唤醒阻塞的线程转换至【可运行状态】与【可运行状态】的区别是对【阻塞状态】的线程来说只要它们一直不唤醒调度器就一直不会考虑调度它们 【终止状态】表示线程已经执行完毕生命周期已经结束不会再转换为其它状态 六种状态 这是从 Java API 层面来描述的,根据 Thread.State 枚举分为六种状态 NEW 线程刚被创建但是还没有调用 start() 方法RUNNABLE 当调用了 start() 方法之后注意Java API 层面的 RUNNABLE 状态涵盖了 操作系统 层面的【可运行状态】、【运行状态】和【阻塞状态】由于 BIO 导致的线程阻塞在 Java 里无法区分仍然认为是可运行BLOCKED WAITING TIMED_WAITING 都是 Java API 层面对【阻塞状态】的细分TERMINATED 当线程代码运行结束
http://www.huolong8.cn/news/14905/

相关文章:

  • 网站 功能呢企业网站建设业务报价单
  • 新乡微信网站建设阿里巴巴网站建设基础服务
  • 网站开发人员的水平网站设计建设流程
  • 网站程序设计软件微信支付 网站建设
  • 网站权重数据包西安定制网站建设
  • 常德市网站建设dw如何制作一个搜索栏
  • 怀化职院网站自己可以做招聘的网站吗
  • 网站图片被盗连怎么办西安建设网站电话
  • 济宁手机网站开发公司网站指向ip列表是什么
  • 天眼查免费查询入口江苏网站关键词优化优化
  • 为什么要建设个人网站做网站送商标
  • 宜昌公司做网站it运维系统详细设计
  • 电子商务网站建设的市场分析自学做网站一般要多久
  • 网站开发工程师课程西安百度首页优化
  • 平邑网站定制东莞网络营销网络培训学校
  • 门户网站建设公司报价作风建设提升年活动网站
  • 酒店网站规划建设方案书网站建设系统课程
  • 珠海做网站价格手机app软件开发排行榜
  • 北京开网站建设公司广州网站建设广州
  • win7 asp网站发布延安商城网站开发设计
  • 九江建设网站程序开发多少钱
  • 教学网站开发视频个人网站做淘宝客教程
  • 徐水网站建设wordpress调用图标icon
  • 网站推广应该坚持什么策略网站制作体会
  • 长沙网站设计公司重庆标志做暧暧的网站
  • 兖州建设局网站网站网页设计招聘
  • wordpress先显示置顶文章seo优化团队
  • 网站建设和网页制作wordpress文章自动添加超链接
  • 网站建设与维修孝感建设公司网站
  • 网站内容设计遵循的原则有建设银行手机版官方网站