线程基础

概念

进程

Process

操作系统中运行的程序就是进程

一个进程可以有多个线程,如在视频中同时听到声音,看到图像,看弹幕等

是执行程序的一次过程,是动态的概念,是系统资源分配的单位

线程

Thread

独立的执行路径

在程序运行时,即使没有自己创建线程,后台也会有多个线程,如主线程,gc线程;

main()为主线程,为系统的入口,用于执行整个程序。

对同一份资源操作时,会存在资源抢夺的问题,并且需要加入并发控制

程序是指令与数据的有序集合,本身并没有任何运行的含义,是一个静态的概念

线程是CPU调度和执行的单位。

线程创建

线程开启不一定立即执行,由CPU调度执行

  1. ​ 继承Thread类

    • 继承Thread类
    • 重写run()方法
    • 调用start开启线程(此时main方法继续执行,不必等待start调用结束)
  2. 实现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);
}
posted @ 2024-08-03 16:21  SyzTak  阅读(18)  评论(0)    收藏  举报