用较小的代码量可以实现的线程定义,可以通过 Lambda 表达式进行线程类的实现。 源代码示例如下所示: package com.fanfengping.demo; import lombok.extern.slf4j.Slf4j; /** * 利用Lambda表达式进行线程类的实现定义 */ @S Read More
上篇文章 Java学习-078-多线程11:使用 synchronized 同步代码块解决多线程资源同步问题 中使用同步代码块解决多线程资源同步问题,synchronized 也可修饰方法,通过同步方法也可实现与同步代码块相同的效果。 语法示例: synchronized 方法返回值 方法名称(参数 Read More
多线程资源同步问题,可通过 synchronized (同步代码块)来解决,同步代码块使用方法如下所示: synchronized (同步对象) { // 同步代码块,对同步对象共享资源的操作 } 将操作线程同一共享资源的代码作为同步代码块包含在 synchronized 同步代码块中,即可解决多线 Read More
如果通过 Runnable 接口实现多线程,则多线程实现类中的属性可被多个线程共享。当多个线程同时操作线程同一个共享资源时,有大概率出现资源同步问题,导致最终的结果偏离我们预期的最终结果,甚至完全相反。 下面通过一个简单实例,演示一下多线程的资源同步问题,示例源代码如下所示: package com Read More
线程的礼让可以通过 Thread.yield() 实现,可以控制优先级低的线程礼让,以便增加优先级高的线程获得优先执行的几率。 具体示例代码如下所示: package com.fanfengping.demo; import lombok.extern.slf4j.Slf4j; /** * 线程礼让 Read More
当程序中存在多个任务同时执行时,若多个任务的优先等级不一样,则可通过设定任务对应的线程优先级,使得对应的任务线程具备高优先级执行。通过 Thread.setPriority(线程优先级) 可以实现。示例代码如下所示: package com.fanfengping.demo; import lomb Read More
Java 程序中,只要前台存在一个线程,则 Java 进程(程序)都不会消失。在前台线程存续期间,可以设置一个后台线程,线程设置为后台线程可通过 Thread.setDaemon(true) 实现。示例代码如下所示: package com.fanfengping.demo; import lomb Read More
当一个线程运行时,另外一个线程可以直接通过interrupt()方法中断其运行状态。示例代码如下所示: package com.fanfengping.demo; import lombok.extern.slf4j.Slf4j; @Slf4j public class Demo10Runnable Read More
可通过 Thread.sleep(millis) 实现线程的休眠,用于实际业务需求开发需要的等待时间。示例源代码如下所示: package com.fanfengping.demo; import lombok.extern.slf4j.Slf4j; @Slf4j public class Demo Read More
在执行开发时,若任务A(主线程)运行到一定程度,满足特定的条件后,必须启动 B任务(示例线程),则可通过线程 join() 方法实现,示例源代码如下所示: package com.fanfengping.demo; import lombok.extern.slf4j.Slf4j; @Slf4j p Read More
继承 Thread 类和实现 Runnale 接口,都可以实现多线程,那么二者有什么联系和区别呢? 通过查看 Thread 类定义,其也是实现了 Runnable 接口,如下源码截图所示: 查看 Thread.init 初始化方法,将初始化中的 Runnable 赋值给了 Thread 类的 pri Read More
本文通过实现 Runnable 接口实现多线程,源代码如下所示: package com.fanfengping.demo; import lombok.extern.slf4j.Slf4j; @Slf4j public class Demo01Runnable implements Runnabl Read More
进程是程序的一次动态执行过程,是程序代码加载 -> 代码执行 -> 执行完成的过程,此过程也是进程本身从产生,发展到最终消亡的过程。目前我们的操作系统均是多进程操作系统,能同时运行多个进程(程序),由于 CPU 具备分时机制,所以每个进程都能循环获得自己的 CPU 时间片,而且 CPU 执行速度非常 Read More
在使用 service nginx status 命令查看 nginx 的运行状态时,提示:Can't open PID file /var/run/nginx.pid (yet?) after start: No such file or directory 导致 nginx 服务关闭,服务不可用 Read More
在 nginx 的配置文件 nginx.conf 中添加如下配置 server { listen 8080; server_name localhost; location /shanghai { proxy_pass http://www.shanghai.gov.cn/; } location Read More
创建如下所示的目录,并在相应的文件中写入相应的内容,简单模拟三个不同的服务 在 Nginx 的配置文件中添加所示的代理配置 server { listen 8081; server_name localhost; location / { root /data/servers/8081; index Read More
Lua 脚本在 Nginx 中基本的使用方式有三种:指令方式、脚本文件、函数(语句块)方式,相应的简单示例源码如下所示: # 使用 Lua 指令方式 location /lua_command { default_type 'text/plain'; content_by_lua 'ngx.say( Read More
在 /etc/bashrc 或 ~/.bashrc 中添加如下所示的环境变量配置 export NGINX_HOME=/opt/work/nginx export PATH=$NGINX_HOME/sbin: 然后使用 source 命令使配置生效 # 对所有用户生效 source /etc/bas Read More
从 Nginx 的官网获取 nginx 的默认启动配置初始脚本,如下所示,并保存为 /etc/init.d/nginx #!/bin/sh # # nginx - this script starts and stops the nginx daemon # # chkconfig: - 85 15 Read More
话不多说,简单安装脚本源码如下所示: #!/bin/bash # Author : Fan Fengping # Date : 2021-03-10 export SOF_PWD=`pwd` export NGX_HOM='/data/servers/nginx' export LUA_JIT='L Read More
Centos Shell 安装后启动时提示找不到 lua 模块的 libluajit-5.1.so.2 文件,具体提示信息:./nginx: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared ob Read More
废话不说,python requests 使用代理非常简单,只需在请求时,使用 proxies 指定代理即可,简单示例代码如下所示: # encoding:utf-8 import requests def requests_proxy(): proxy = '127.0.0.1:8081' pro Read More
在编写 python 爬虫时,经常会遇到需要填写 User-Agent 请求头信息参数,若长时间使用一个请求头,并频繁的请求信息,会被服务器认定为爬虫,从而主动断开连接,导致 python 爬虫的失败。 因而在请求信息时,需要不定期的更换相应的请求头信息,使用 random.choice 方法可以从 Read More
python 中 random 用于生成伪随机数或随机选择数据,常见的使用方法代码示例如下 # encoding:utf-8 import random import stringdef random_demo(): print('随机选取 0 - 9 之间的整数,random.randrange( Read More
编写自动化安装脚本或部署应用的初始化脚本时,通常需要判断软件是否已经安装,通过如下方法,可进行初步的软件安装判断,shell 示例脚本如下所示: #!/bin/bash IS_INSTALLED=$(rpm -qa |grep java) if [ $? -eq 0 ] then echo 'ins Read More