ali-java-多线程

  1. java多线程

Thread的原理:

private native void start0();  start0 是一个native 方法  ,jvm虚拟机在不同的操作系统上(windows,linux,unix)都是不同的算法来实现的。

A native method is a Java method whose implementation is provided by non-java code

JNI技术Java不在乎Native方法是用什么语言实现的,只要一来语言能和底层打 交道就好了,二来语言实现完可以提供出来.dll/.so文件。因此同一个Native方法,如果不同的Java虚拟机去调用它,那么结果可能都不同,比 如Object的hashCode(),当然,运行效率也不尽然相同,因为不同的虚拟机对于不同的Native方法有自己的实现

  1. runnable

java只能支持单继承,runnale是接口可以突破这一局限

  • Thread和runable的关系 (Thread类本身 也是实现了runable接口),但是都是通过调用Thread类对象启动多线程 new Thread(runable).start()
  • Thread 的start 和 run方法:start方法因为开启新的线程因此包含了系统资源调度,同时方法内是通过调用run方法,run方法内部也是调用了target.run方法,也就是实现了runable的方法。

run方法只涉及到我们业务处理,所以我们写代码只关注业务代码即可。

  • 多线程开发 需要思考理清的问题。我们在开发多线程的时候其实就是资源的抢占访问。我们每实例化Thread对象就是多个线程对象,这多个Thread对象就表示多个线程对象
    Runnable接口可以用来表示一个资源,一个Runable接口就是一个资源。例如,Thread(runableA),Thread(runnableA),这是两个Thread线程都是访问runnableA实例这一个资源
    就是多线程开发。

  1. callable

 和runable一样都是需要Thread.start启动运行,callable是可以返回的,FutureTask也是实现了runable方法。里面调用了callable的call方法

task.get()方法就是在等在结果,awaitDone for循环等待结果执行完成,report 则将返回outcome将结果返回。

 

  1. 线程的运行状态

1、任何一个线程都是通过Thread封装,调用start启动,进入就绪状态

2、进入就绪状态就等待系统调度,调度成功进入运行状态,但是运行状态不可能一直持续下去,中间会产生暂停状态,例如某个线程执行到一定时间进入阻塞状态,随后会重新回归就绪状态。

3、run方法执行完毕,线程也就结果此时就可以直接进入到终止状态。

常用方法


public static native Thread currentThread();
public static native void sleep(long millis) throws InterruptedException; 需要处理中断异常,另外多个线程话进入到这一段代码块sleep(), 休眠会有先后顺序。
public boolean isInterrupted() public void interrupt() 所有正在执行的线程都是可以被中断的,中断线程必须进行异常处理InterruptedException。
public final void wait() throws InterruptedException 从object类中继承,当前线程会等待,当前线程指的是调用者线程。且当前线程必须持有object对象的监控器。currentThread{ synchronized(object) thisObject.wait()}
public final void join() throws InterruptedException  强制执行内部也是调用了wait,可以在满足某些条件之后,某一线程可独占资源,直到结束。当前线程中调用 霸道.join,那么当前线程需要等待此霸道线程执行完后才能执行。
public final synchronized void join(long millis)
    throws InterruptedException {
        long base = System.currentTimeMillis();
        long now = 0;

        if (millis < 0) {
            throw new IllegalArgumentException("timeout value is negative");
        }

        if (millis == 0) {
            while (isAlive()) {
                wait(0);
            }
        } else {
            while (isAlive()) {    这里while循环表示被抢线程就会一直等待霸道线程执行完成
                long delay = millis - now;
                if (delay <= 0) {
                    break;
                }
                wait(delay);
                now = System.currentTimeMillis() - base;
            }
        }
public static native void yield(); 礼让
public final void setPriority(int newPriority) 设置优先级,优先级越高越容易执行

Volatile 关键字

主要是定义在属性上的,表示此属性是只在操作主内存的,和同步没有关系。

正常变量操作:

1 获取变量原有的数据内容副本   2 利用副本进行数学计算   3 讲计算后的副本同步到主内存中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ali-oss 是阿里云提供的 OSS(Object Storage Service)的 JavaScript SDK,可以在浏览器端和 Node.js 环境下使用。Vue.js 是一个流行的前端框架,常用于开发单页面应用程序。 在 Vue.js 中使用 ali-oss 可以方便地上传和下载文件到阿里云 OSS。下面是 ali-oss 的依赖详解: 1. 安装 ali-oss 在 Vue.js 中使用 ali-oss 需要先安装它。可以使用 npm 安装: ``` npm install ali-oss --save ``` 2. 引入 ali-oss 在 Vue.js 中使用 ali-oss 需要先引入它。可以在 Vue 组件中使用 import 引入: ``` import OSS from 'ali-oss' ``` 3. 创建 OSS 实例 在使用 ali-oss 之前,需要先创建一个 OSS 实例。可以使用以下代码创建: ``` const client = new OSS({ region: '<your region>', accessKeyId: '<your accessKeyId>', accessKeySecret: '<your accessKeySecret>', bucket: '<your bucket>' }) ``` 其中,region 是 OSS 存储所在的区域,accessKeyId 和 accessKeySecret 是阿里云账号的 AccessKey,bucket 是要操作的存储桶名称。 4. 上传文件 使用 ali-oss 可以方便地上传文件到 OSS。可以使用以下代码上传文件: ``` const result = await client.put('object-key', 'local-file'); ``` 其中,object-key 是上传到 OSS 的文件路径,local-file 是本地文件路径。 5. 下载文件 使用 ali-oss 可以方便地下载文件到本地。可以使用以下代码下载文件: ``` const result = await client.get('object-key', 'local-file'); ``` 其中,object-key 是 OSS 中的文件路径,local-file 是本地文件路径。 总的来说,ali-oss 可以方便地在 Vue.js 中上传和下载文件到阿里云 OSS。在使用 ali-oss 时,需要先安装并引入它,然后创建一个 OSS 实例,最后使用 put() 或 get() 方法上传或下载文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值