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

怎么做网站内部链接的优化wordpress cc

怎么做网站内部链接的优化,wordpress cc,网站制作公司 深圳,国家企业信用查询信息系统(全国)目录 Thread构造方法Thread 的常见属性创建一个线程获取当前线程引用终止一个线程使用标志位使用自带的标志位 等待一个线程线程休眠线程状态线程安全线程不安全原因总结解决由先前线程不安全问题例子 Thread构造方法 方法说明Thread()创建线程对象Thread(Runnable target)使用… 目录 Thread构造方法Thread 的常见属性创建一个线程获取当前线程引用终止一个线程使用标志位使用自带的标志位 等待一个线程线程休眠线程状态线程安全线程不安全原因总结解决由先前线程不安全问题例子 Thread构造方法 方法说明Thread()创建线程对象Thread(Runnable target)使用 Runnable 对象创建线程对象Thread(String name)创建线程对象并命名当前线程名Thread(Runnable target, String name)使用 Runnable 对象创建线程对象并命名Thread(ThreadGroup group,Runnable target)线程可以被用来分组管理分好的组即为线程组 Thread 的常见属性 属性获取方法IDgetId()名称getName()状态getState()优先级getPriority()是否后台线程isDaemon()是否存活isAlive()是否被中断isInterrupted() 解释 ID 是线程的唯一标识不同线程不会重复但是这里的id是Java给的id不是前面PCB中说的id。名称在各种调试工具用到前面构造方法给的名称就是这个。状态表示线程当前所处的一个情况。优先级高的线程理论上来说更容易被调度到但是这个是系统微观程度上的很难感知到。关于后台线程需要记住一点JVM会在一个进程的所有非后台线程(前台线程)结束后才会结束运行而后台线程不影响Java进程的结束可以在start()调用前使用setDaemon(true)来设置线程为后台线程。是否存活即简单的理解为 run 方法是否运行结束了 创建一个线程 在前一篇文章中就介绍了相关操作在这简单提一下一定要使用线程变量名.start();创建一个新线程start()方法是Java提供的API来调用系统中创建线程的方法。而run()方法是这个线程要干的事情在线程创建好之后自动就会调用。 每个线程对象只能start一次。 获取当前线程引用 方法说明public static Thread currentThread();返回当前线程对象的引用 是静态方法直接使用Thread.currentThread();就可以获取到当前的线程引用。 终止一个线程 在Java中终止一个线程的思路就是让线程中的run()方法尽快结束。 使用标志位 由于线程迟迟不结束大多是因为里面有循环语句我们就可以使用一个成员变量来控制循环的结束。 不能使用局部变量定义在main方法内因为虽然lambda表达式可以捕获上层变量但是这个变量不可以进行修改。 public class Demo {private static boolean isQuit false;public static void main(String[] args) {Thread thread new Thread(() -{while(isQuit) {//具体操作 }});thread.start();isQuit true;} }使用自带的标志位 方法说明public void interrupt()中断对象关联的线程如果线程正在阻塞则以异常方式通知否则设置标志位public static boolean interrupted()判断当前线程的中断标志位是否设置调用后清除标志位不建议使用静态方法为所有线程共用的public boolean isInterrupted()判断对象关联的线程的标志位是否设置调用后不清除标志位 Java中自带了标志位来标志是否结束循环。先使用Thread.currentThread()获取到当前线程在.isInterrupted()获取标志位。然后再主进程中调用interrupte()方法来将标志位值修改为true。 public class Demo {public static void main(String[] args) {Thread thread new Thread(() -{while (!Thread.currentThread().isInterrupted()) {//操作}});thread.start();thread.interrupt();} }但是如果在线程中有捕获InterruptedException异常的语句那么会在调用interrupte()同时捕获到该异常并且消除标志位。 此时我们就可以在catch语句中自己选择是将线程结束还是进行其它操作。 public class Demo {public static void main(String[] args) {Thread thread new Thread(() -{while (!Thread.currentThread().isInterrupted()) {try {Thread.sleep(1000);} catch (InterruptedException e) {//1.不操作继续执行线程e.printStackTrace();//2.结束线程break;//3.进行其它操作}}});thread.start();thread.interrupt();} } 等待一个线程 方法说明public void join()等待线程结束public void join(long millis)等待线程结束最多等 millis 毫秒public void join(long millis, int nanos)等待线程结束最多等 millis 毫秒但可以更高精度 在主线程中调用线程对象.join();就是等待线程对象执行完再执行主线程。 调用细节 调用线程对象.join();就会让该线程执行完才继续执行外面的线程如果线程对象对应的线程一直不结束那么外面的线程就会一直等死等调用线程对象.join(long millis);就会在该线程执行millis毫秒后执行外面的线程。如果遇到调用join前线程已经结束外面的线程不会陷入等待。 如下代码执行结果就是先打印5个thread线程最后在打印main线程 public class Demo6 {public static void main(String[] args) throws InterruptedException {Thread thread new Thread(() - {for(int i 0; i 5; i) {System.out.println(thread线程);}}); thread。start();thread.join();System.out.println(main线程);} } 线程休眠 方法说明public static void sleep(long millis) throws InterruptedException休眠当前线程 millis毫秒public static void sleep(long millis, int nanos) throws InterruptedException可以更高精度的休眠 在系统让线程休眠sleep中的参数毫秒后线程会被唤醒从阻塞状态变成就绪状态但不会马上执行涉及到调度开销。所以实际使用的时间是大于sleep中的参数的。 并且在Windows和Linux系统上达到毫秒级误差。 线程状态 在操作系统里面进程和线程最重要的状态就是就绪状态和阻塞状态。 在Java中又给线程又给线程赋予了一些其他状态。 线程的状态是一个枚举类型 Thread.State。 状态说明newThread对象已经创建但是start方法没有调用terminatedThread对象还在但是内核中线程已将结束了Runnable就绪状态线程已经在CPU上执行或者在CPU上等待执行timed_waiting由于sleep这种固定时间产生的阻塞waiting由于wait这种不固定时间产生的阻塞blocked由于锁竞争产生的阻塞 线程安全 线程安全的简单说法就是符不符合预期如果多线程环境下代码运行的结果是符合我们预期的即在单线程环境应该的结果则说这个程序是线程安全的。 例如以下代码 我们的预期结果是10000但是其实每次的结果都是不一样的这种就是线程不安全。 public class Demo {private static int ret;public static void main(String[] args) throws InterruptedException {Thread thread1 new Thread(() - {for (int i 0; i 5000; i) {ret;}});Thread thread2 new Thread(() - {for (int i 0; i 5000; i) {ret;}});thread1.start();thread2.start();thread1.join();thread2.join();System.out.println(ret);;} }就以上诉代码例子来讲解出现线程不安全的原因。 在CPU上实现自增操作主要有三步 将数据给到CPU的寄存器中数据在寄存器中加1将数据返回到内存中。 就以一个thread1和一个thread2来说每个线程都进行这三步操作但是线程在CPU上又是随机调用的这就相当于有六个位置随机坐相当于排列组合的A66当数据作为不同线程的开始值进入寄存器时就相当于两次自增只执行了一次。 但是线程调用就更加复杂了线程数量不一样顺序不一样这就相当于有无数种可能了所以结果是不可控的就导致了线程不安全的情况。 线程不安全原因总结 在介绍线程不安全原因之前先介绍一个概念原子性。 原子性简单来讲就是执行一段代码连续执行完不被其他线程干扰。举个例子 我们把一段代码想象成一个房间每个线程就是要进入这个房间的人。如果没有任何机制保证A进入房间之后还没有出来B 是不是也可以进入房间打断 A 在房间里的隐私。这个就是不具备原子性的。 那我们应该如何解决这个问题呢是不是只要给房间加一把锁A 进去就把门锁上其他人是不是就进不来了。这样就保证了这段代码的原子性了。 有时也把这个现象叫做同步互斥表示操作是互相排斥的。 原因总结 操作系统调度线程是随机的抢占式执行多个线程对同一个变量进行修改修改操作不是原子性的内存可见性问题指令重排序问题。 解决由先前线程不安全问题例子 要解决就要从原因入手 操作系统随机调度是操作系统带来的解决不了多个线程对一个变量修改有些可以规避但有些根据需求无法规避。将操作改为原子性可以通过synchronized关键字 加锁操作来实现。 语法 synchronized(变量){ //修改操作 }()括号内的变量不重要作用是区分加锁对象是否一样如果对同一个对象加锁那么两个操作就会产生“blocked”锁竞争阻塞问题后一个线程就会等到前一个线程解锁再执行。 进入左大括号 ‘{’ 就是加锁出了右大括号 ‘}’ 就是解锁。 对上诉代码进行如下修改就会出现预期结果10000: public class Demo7 {private static int ret;public static void main(String[] args) throws InterruptedException {Object block new Object();Thread thread1 new Thread(() - {for (int i 0; i 5000; i) {synchronized (block){ret;}}});Thread thread2 new Thread(() - {for (int i 0; i 5000; i) {synchronized (block){ret;}}});thread1.start();thread2.start();thread1.join();thread2.join();System.out.println(ret);;} }synchronized还可以修饰方法静态方法也行。 synchronized修饰实例方法 class Counter{public int ret;public void increase1() {synchronized (this) {ret;}}//简化版本synchronized public void increase2() {ret;} }synchronized修饰静态方法相当于修饰这个类 class Counter{private static int ret2;public static void increase3() {synchronized (Counter.class) {ret2;}}//简化版本synchronized public static void increase4() {ret2;} }
http://www.w-s-a.com/news/891009/

相关文章:

  • 邱县做网站百度搜索排名机制
  • 运城个人网站建设智慧团建系统官方网站登录
  • 公司营业执照可以做几个网站一家专门做母婴的网站
  • 网站建设商标属于哪个类别搜狗seo快速排名公司
  • 织梦做商城网站企业网络建站
  • 网站后期维护都有什么wordpress首页加图片
  • 展会网站怎么做网页设计与制作教程版徐洪亮课后答案
  • 石景山网站建设设计公司建设网站怎么建立服务器
  • 本地生活服务平台app网站关键词优化原理
  • 建网站的公司叫什么重庆论坛建站模板
  • 湖北网站制作公司银川网站建设哪家不错
  • 网站后台演示地址服装网站建设公司推荐
  • 湖北钟祥建设局网站旅游哪个网站最好
  • 浙江建设工程信息网站辽宁建设工程信息网场内业绩什么意思
  • 郑州做网站公司 汉狮网络专业图片搜集网站怎么做
  • 网站托管是什么品牌推广营销平台
  • 制作网站的难度贵州省兴义市建设局网站
  • 永春建设局网站室内设计师培训班学费多少
  • 做仿站如何获取网站源码windows2012做网站
  • 网站建设最好的公司东莞外贸网站
  • 普兰店网站建设一般做网站什么价格
  • 网站建设的发展目标甘肃网站设计公司
  • 常州西站建设规划室内装修设计学校哪里好
  • 大连网站制作选择ls15227如何编辑网站
  • 网站发稿平台迪士尼网站是谁做的
  • 常州有哪些好的网站建设案例wordpress 360 插件
  • 模板网站有后台么柳城网站建设
  • 地方门户网站制作一级做c爱片的网站
  • 自己上传图片做动漫图网站北京福田汽车
  • 一级a做爰片免费网站录像ps做网站图片水印