企业网站有哪些举几个例子wordpress调用python

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

企业网站有哪些举几个例子,wordpress调用python,本地搭建wordpress,网站平台构建前言

  1. 学习视频#xff1a; 尚硅谷Java零基础全套视频教程(宋红康2023版#xff0c;java入门自学必备)_哔哩哔哩_bilibili 2023最新Java学习路线 - 哔哩哔哩 第三阶段#xff1a;Java高级应用 9.异常处理 10.多线程 11.常用类和基础API 12.集合框架 13.泛型 14… 前言 
  2. 学习视频 尚硅谷Java零基础全套视频教程(宋红康2023版java入门自学必备)_哔哩哔哩_bilibili 2023最新Java学习路线 - 哔哩哔哩 第三阶段Java高级应用 9.异常处理 10.多线程 11.常用类和基础API 12.集合框架 13.泛型 14.数据结构与集合源码 15.File类与IO流 16.网络编程 17.反射机制 18.JDK8、17 新特性 正文 10.多线程 10.1 多线程的理解 程序、进程、线程区分 举例 线程调度 10.2 多线程的创建方式 10.2.1 多线程的创建方式一继承Thread类 举例创建一个分线程1用于遍历100以内的偶数。 可以看到创建的线程和main的线程在交互执行。还可以看到线程名如上。 System.out.println(Thread.currentThread().getName():i***********);System.out.println(Thread.currentThread().getName():i); 例二 创建Thread类的匿名子类的匿名对象 10.2.2 多线程的创建方式二:实现Runnable接口建议使用方式 或 声明了两个线程但是只声明了一个EvenNumberPrint类相当于共享数据。 相当于 代码逻辑新建线程执行任务  和 数据一个EvenNumberPrint类的分离。 两种创建线程的方式对比 练习题 10.3 继承Thread类的常用方法 10.3.1 构造器 Thread中 使用举例 10.3.2 常用方法 使用举例 10.3.3 优先级Priority 10.3.4 多线程的优点 10.4 生命周期 现在JDK17线程的状态如下 新建、准备、运行、阻塞锁阻塞、无限等待、计时等待、死亡。 public enum State {NEW,RUNNABLE,BLOCKED,WAITING,TIMED_WAITING,TERMINATED;}运行RunnableReady、Running。 阻塞分为三种状态 锁阻塞BLOCKED、无限等待(WAITING)、计时等待(TIMED_WAITING)。 死亡terminated。 10.5 买票案例引出线程安全问题引出同步机制 线程不安全已卖过的票还会被再次售卖。加上static共享变量也不行。 10.5.1 使用synchronized同步机制处理线程安全问题 同步代码块 同步监视器用在循环内部保证了每次售票时三个线程随机排队进入监视器内部执行买票模拟了三个窗口售票。如果把循环体整个加入监视器则三个窗口只随机排队一次然后售空才能结束循环进入下一次排队不符合实际。 使用快捷键生成环绕方式synchronized监视器然后直接在小括号内写this。 在继承Thread类后假如声明三个子类对象要用static修饰作为同步监视器的Object类使三个子类共享数据。保证唯一性使用当前类.class,即Window.class。 同步方法 public static synchronized void xxx(){ //操作共享数据的代码 } 此时的同步监视器默认的就是this调用者。在下列代码中this是唯一的因为只新建了一个SaleTicket2类的对象。三个线程的共享对象是同一个。 继承 如下三个线程没有共享对象是三个不同对象。this有三个。 synchronized的优缺点 习题 sleep在哪执行哪个线程就进入阻塞。主线程内执行sleep方法主线程阻塞5秒 10.5.2 线程安全的懒汉式 两个线程获取Get方法创建单例的实例对象线程不安全创建了两个实例对象。需要添加Synchronized得到同步方法。 方法二同步代码块   和   方式三同步代码块 优化进监视器之前多加一层判断效率更高 使用volatile避免指令重排 将instance声明为volatile可以避免在第一个线程正在创建的时候还没有地址第二个线程判断第一个线程已经非空就返回instance造成返回空值。 10.5.3 线程的同步机制带来 死锁问题 死锁示例 不睡眠则很快执行没有死锁。睡眠诱发死锁概率提高发现有死锁问题不能运行出结果。 10.5.4 使用jdk5.提供的Lock锁的方式 处理线程安全问题 目前创建ReentrantLock重新re进入entrance 锁lock的对象 //private外部不可访问//static几个线程共用同一个锁//final:赋值之后不可修改。private static final ReentrantLock lock new ReentrantLock(); 检查在使用阻塞等待获取锁的方式中必须在try代码块之外并且在加锁方法与try代码块之间没有任何可能抛出异常的方法调用避免加锁成功后在finally中无法解锁。 说明一如果在lock方法与try代码块之间的方法调用抛出异常那么无法解锁造成其它线程无法成功获取锁。 说明二如果lock方法在try代码块之内可能由于其它方法抛出异常导致在finally代码块中unlock对未加锁的对象解锁它会调用AQS的tryRelease方法取决于具体实现类抛出IllegalMonitorStateException异常。 说明三在Lock对象的lock方法实现中可能抛出unchecked异常产生的后果与说明二相同。 java.concurrent.LockShouldWithTryFinallyRule.rule.desc Positive exampleLock lock new XxxLock();// …lock.lock();try {doSomething();doOthers();} finally {lock.unlock();} synchronized不管是同步代码块还是同步方法都需要在结束一对{}之后释放对同步监视器的调用。Lock是通过两个方法控制需要被同步的代码更灵活一些。 Lock作为接口提供了多种实现类适合更多更复杂的场景效率更高。 在JUC会详细讲解LOCK。 10.6 线程的通信 wait()和notify(): 能不能使下面两个线程交替打印1~100之间的数 线程一执行到notify()不需要唤醒继续执行然后打印数字执行wait()。 线程二执行到notify()本身不需要唤醒但唤醒线程一线程二继续执行打印数字执行wait()。线程一被唤醒后继续执行wait()后面的代码else然后重新执行到notify()本身不需要唤醒但唤醒线程二。 wait()和sleep()的区别 习题 10.7 多线程的创建方式三实现Callable接口JDK5.0新增了解 t1.start()执行之后分线程开始打印1~100以内的偶数主线程开始去调用futureTask.get()方法打印总和。若分线程阻塞例如加上Thread.sleep(1000);则主线程获取的总和结果就会不正确。 其实不是这样的t1.start()执行之后分线程开始打印1~100以内的偶数主线程开始去调用futureTask.get()方法会暂时阻塞等待return操作的结果。而return操作需要等分线程打印1~100以内的偶数执行完毕然后才return主线程才会打印总和。 10.8 多线程的创建方式四使用线程池开发中使用 总结 栈管运行堆管存储。所以线程在栈里。 非静态方法同步监视器默认的就是this调用者对象。 非静态方法同步监视器默认的就是this调用者对象。如下t1线程进入了一个对象SaleTicket1的synchronized方法之后其他线程例如t2就还能进入对象SaleTicket1的其他方法因为两个同步监视器的this分别是不同的实例对象s和s1。而且都是唯一的。但是t3和t1的this是同一个所以不能访问此对象实例s的其他方法。发挥了同步代码块的作用避免了线程安全问题。 阻塞还可能是sleep()、wait()、join()、suspend()了。 自己练习一下。