线程基础
概念
进程
Process
操作系统中运行的程序就是进程
一个进程可以有多个线程,如在视频中同时听到声音,看到图像,看弹幕等
是执行程序的一次过程,是动态的概念,是系统资源分配的单位
线程
Thread
独立的执行路径
在程序运行时,即使没有自己创建线程,后台也会有多个线程,如主线程,gc线程;
main()为主线程,为系统的入口,用于执行整个程序。
对同一份资源操作时,会存在资源抢夺的问题,并且需要加入并发控制
程序是指令与数据的有序集合,本身并没有任何运行的含义,是一个静态的概念
线程是CPU调度和执行的单位。
线程创建
线程开启不一定立即执行,由CPU调度执行
-
继承Thread类
- 继承Thread类
- 重写run()方法
- 调用start开启线程(此时main方法继续执行,不必等待start调用结束)
-
实现runnable接口
- 重写run()方法
- 创建runnable对象
- 创建Thread代理runnable对象
- 使用Thread代理来调用start
更推荐使用runnable接口来创建线程,避免OOP单继承的局限性,灵活方便,方便同一个对象被多个线程使用
图片下载
通过commons.io jar包来进行图片下载
常见问题
Server returned HTTP response code: 403 for URL
403错误
403错误其实是一种在网站访问过程中常见的错误提示,表示资源不可用,拒绝访问
通常是由于服务器上接口、文件或目录的权限设置导致,比如IIS或者apache设置了访问权限不当。
错误代码403是服务器理解客户的请求,但拒绝处理它,通常由于服务器上文件、接口或者目录的权限设置导致的WEB访问错误。
403.1:错误是由于"执行"访问被禁止而造成的问题;
403.2:错误是由于"读取"访问被禁止而造成的问题;
403.3:错误是由于"写入"访问被禁止而造成的等等问题。
具体查看了一下系统是没有给用户配置此接口的权限。
解决问题
系统中配置为用户配置了相应的接口权限,则解决了我们上述的403问题
扩展资料
了解一些我们常见的错误代码:
1 404.0,表示没有找到文件或目录的意思;
404.1-无法在所请求的端口上访问Web站点的意思;
404.2表示Web服务扩展锁定策略阻止本请求的意思;
404.3表示MIME映射策略阻止本请求的意思。
2、405表示用来访问本页面的HTTP谓词不被允许(方法不被允许)的意思。
3、406表示客户端浏览器不接受所请求页面的MIME类型的意思。
4、503表示服务不可用。这个错误代码为IIS6.0所专用的意思。
5、504表示网关超时的意思。
Callable接口的实现
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
//定义实现Callable接口的的实现类重写call方法。
public class MyCallableTask implements Callable<Integer>{
@Override
public Integer call() throws Exception {
//TODO 线程执行方法
return -1;
}
}
public class Test7 {
public static void main(String[] args) throws ExecutionException, InterruptedException {
//创建Callable对象
Callable<Integer> mycallabletask = new MyCallableTask();
//开始线程
FutureTask<Integer> futuretask = new FutureTask<Integer>(mycallabletask);
new Thread(futuretask).start();
//通过futuretask可以得到MyCallableTask的call()的运行结果:
futuretask.get();
}
}
多线程
多个线程处理同一资源,如果没有并发,线程不安全,数据紊乱,则会出现问题
代理
静态代理
真实对象与代理对象都要实现同一个接口,代理对象代理真实角色
好处:
代理对象可以做很多真实对象做不了的事情,真实对象专注做自己的事情
Lambda表达式
λ表达式形式:
(参数)->{
//内容
}
lambda表达式只能适用于只有一个抽象方法的接口(又名函数式接口)
public class LambdaTest1 {
public static void main(String[] args) {
ILove love = (a)->{
System.out.println("I love "+a);
};
love.love("WBY");
}
}
// 带参的lambda表达式
interface ILove{
public abstract void love(String a);
}
浙公网安备 33010602011771号