java基础学习笔记6

Vision Mamba双向SSM实战解析:从源码到部署,手把手教你复现Vim模型核心模块 本文深入解析Vision Mamba(Vim)模型的双向SSM架构,从源码实现到部署实践提供完整指南。通过拆解双向状态空间机制的核心设计,详细讲解参数共享策略、方向融合方式和计算效率优化技巧,并附有环境配置、训练技巧和常见问题解决方案,帮助开发者高效复现Vim模型。 阅读详情

java基础学习笔记6

线程

Cpu速度比较快,看起来是多线程,实际上,在一个时间点上,只有一个线程在运行。

进程:静态概念。

线程:一个进程里面有个主线程,叫main方法。

一个程序里面不同的执行路径。

通过java.lang.Thread类实现。

实现方法:

1.实现Runnable接口

public class thtest {
    public static void main(String[] args) {
        t1 t1=new t1();
        t1.run();

//        Thread t=new Thread(t1);
//        t.start();

        for(int i=0;i<5;i++){
            System.out.println("主线程"+i);
        }
    }
}


class t1 implements Runnable{
    @Override
    public void run() {
        for(int i=0;i<5;i++){
            System.out.println("新线程"+i);
        }
    }
}

2.从Thread类继承

继承以后,本身就是一个Thread了,就不用了new一个Thread了。

public class thtest {
    public static void main(String[] args) {
        t1 t1=new t1();
        t1.start();
        for(int i=0;i<5;i++){
            System.out.println("主线程"+i);
        }
    }
}


class t1 extends Thread{
    @Override
    public void run() {
        for(int i=0;i<5;i++){
            System.out.println("新线程newnewnew"+i);
        }
    }
}

run和start区别

调用start,会交替运行主子线程。

image-20201001135515858

调用run,会先走子线程,在回主线程。

image-20201001135426490

哪种比较好?

实现Runnable比较好。

因为继承只能继承一个。继承以后就不灵活了。

线程状态

new 出来,然后start()就绪准备,通过cpu调度,有空就运行一下这个子线程。

子线程运行时,随时被cpu又调成start状态。

子线程运行期间,很有可能发生阻塞,进入阻塞状态,就呆在那里不运行。阻塞解除以后回到start状态。

线程控制的基本方法

1.isAlive()

new出来没start也是死的。

线程结束了,也是死的。

就绪,阻塞,都是活的。

2.getPriority setPriority

优先级,优先级越高,得到的cpu分配的时间片越多

范围:1-10 默认为5

package com.ufo.eight;

import java.util.Date;

public class thtest {
    public static void main(String[] args) {
        T1 t1 = new T1();
        Thread th1=new Thread(t1);
        th1.setPriority(10);

        T2 t2 = new T2();
        Thread th2=new Thread(t2);


        th1.start();th2.start();

    }
}


class T1 implements Runnable {
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println("子线程11111111111" + i);

        }
    }
}


class T2 implements Runnable {
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println("子线程二二二二二" + i);

        }
    }
}

结果:可以看出,子线程1设置优先级以后,前面部分大部分是子线程1,但没有绝对把子线程2杀死,还有有点子线程2在运行的。

结果:
子线程111111111110
子线程111111111111
子线程111111111112
子线程111111111113
子线程111111111114
子线程111111111115
子线程111111111116
子线程111111111117
子线程111111111118
子线程111111111119
子线程1111111111110
子线程1111111111111
子线程1111111111112
子线程1111111111113
子线程1111111111114
子线程1111111111115
子线程1111111111116
子线程1111111111117
子线程1111111111118
子线程1111111111119
子线程1111111111120
子线程1111111111121
子线程1111111111122
子线程1111111111123
子线程二二二二二0
子线程二二二二二1
子线程1111111111124
子线程二二二二二2
子线程二二二二二3
子线程二二二二二4
子线程二二二二二5
子线程二二二二二6
子线程二二二二二7
子线程二二二二二8
子线程二二二二二9
子线程1111111111125
子线程二二二二二10
子线程1111111111126
子线程1111111111127
子线程1111111111128
子线程1111111111129
子线程1111111111130
子线程1111111111131
子线程1111111111132
子线程1111111111133
子线程1111111111134
子线程1111111111135
子线程1111111111136
子线程1111111111137
子线程二二二二二11
子线程二二二二二12
子线程二二二二二13
子线程二二二二二14
子线程二二二二二15
子线程二二二二二16
子线程二二二二二17
子线程二二二二二18
子线程二二二二二19
子线程二二二二二20
子线程1111111111138
子线程1111111111139
子线程1111111111140
子线程1111111111141
子线程1111111111142
子线程1111111111143
子线程1111111111144
子线程1111111111145
子线程1111111111146
子线程1111111111147
子线程1111111111148
子线程1111111111149
子线程1111111111150
子线程1111111111151
子线程1111111111152
子线程1111111111153
子线程1111111111154
子线程1111111111155
子线程1111111111156
子线程1111111111157
子线程1111111111158
子线程1111111111159
子线程1111111111160
子线程1111111111161
子线程1111111111162
子线程1111111111163
子线程1111111111164
子线程1111111111165
子线程1111111111166
子线程1111111111167
子线程1111111111168
子线程1111111111169
子线程1111111111170
子线程1111111111171
子线程1111111111172
子线程1111111111173
子线程1111111111174
子线程1111111111175
子线程二二二二二21
子线程1111111111176
子线程1111111111177
子线程1111111111178
子线程1111111111179
子线程1111111111180
子线程1111111111181
子线程1111111111182
子线程1111111111183
子线程1111111111184
子线程1111111111185
子线程1111111111186
子线程1111111111187
子线程1111111111188
子线程1111111111189
子线程1111111111190
子线程1111111111191
子线程1111111111192
子线程1111111111193
子线程1111111111194
子线程1111111111195
子线程二二二二二22
子线程二二二二二23
子线程1111111111196
子线程1111111111197
子线程1111111111198
子线程1111111111199
子线程二二二二二24
子线程二二二二二25
子线程二二二二二26
子线程二二二二二27
子线程二二二二二28
子线程二二二二二29
子线程二二二二二30
子线程二二二二二31
子线程二二二二二32
子线程二二二二二33
子线程二二二二二34
子线程二二二二二35
子线程二二二二二36
子线程二二二二二37
子线程二二二二二38
子线程二二二二二39
子线程二二二二二40
子线程二二二二二41
子线程二二二二二42
子线程二二二二二43
子线程二二二二二44
子线程二二二二二45
子线程二二二二二46
子线程二二二二二47
子线程二二二二二48
子线程二二二二二49
子线程二二二二二50
子线程二二二二二51
子线程二二二二二52
子线程二二二二二53
子线程二二二二二54
子线程二二二二二55
子线程二二二二二56
子线程二二二二二57
子线程二二二二二58
子线程二二二二二59
子线程二二二二二60
子线程二二二二二61
子线程二二二二二62
子线程二二二二二63
子线程二二二二二64
子线程二二二二二65
子线程二二二二二66
子线程二二二二二67
子线程二二二二二68
子线程二二二二二69
子线程二二二二二70
子线程二二二二二71
子线程二二二二二72
子线程二二二二二73
子线程二二二二二74
子线程二二二二二75
子线程二二二二二76
子线程二二二二二77
子线程二二二二二78
子线程二二二二二79
子线程二二二二二80
子线程二二二二二81
子线程二二二二二82
子线程二二二二二83
子线程二二二二二84
子线程二二二二二85
子线程二二二二二86
子线程二二二二二87
子线程二二二二二88
子线程二二二二二89
子线程二二二二二90
子线程二二二二二91
子线程二二二二二92
子线程二二二二二93
子线程二二二二二94
子线程二二二二二95
子线程二二二二二96
子线程二二二二二97
子线程二二二二二98
子线程二二二二二99

3.Thread.sleep

暂停一小会儿

注意他是静态方法,传入毫秒数,记得抛异常,中断异常

不能在run上面抛出异常,因为重写存的方法抛出的异常不能和重写之前不一样。



import java.util.Date;

public class thtest {
    public static void main(String[] args) {
        T1 t1=new T1();
        t1.start();
        try {
            Thread.sleep(5000);

        } catch (InterruptedException e) {

        }
        t1.interrupt();
    }
}


class T1 extends Thread{
    @Override
    public void run() {
        while(true){
            System.out.println("子线程在运行"+new Date());
            try {
                sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
                System.out.println("子线程被打断了");
                return;
            }

        }
    }
}

image-20201001142019052

关闭一个线程,建议不适用interrupt,万一打开一个资源没关闭,太粗暴了。

推荐办法:使用标志位,让子线程自己结束。

image-20201001142617568

4.join 合并

把子线程合并到当前线程。相当如方法调用。和run()一个结果。需要把子线程执行完后当前线程才能继续执行。

public class thtest {
    public static void main(String[] args) {
        T1 t1=new T1();
        t1.start();
        try {
            t1.join();
        } catch (InterruptedException e) {
        }

        for (int i=0;i<5;i++){
            System.out.println("主线程"+i);
        }
    }
}


class T1 extends Thread{
    @Override
    public void run() {
        for (int i=0;i<5;i++){
            System.out.println("子线程enwewnewn"+i);
        }
    }
}

image-20201001143335325

5.yeild 让出cpu,让其他线程先运行,当前线程进入就绪队列,等待调度

public class thtest {
    public static void main(String[] args) {
        T1 t1 = new T1();
        T1 t2 = new T1();
        t1.start();t2.start();
        for (int i = 0; i < 5; i++) {
            System.out.println("主线程" + i);
        }
    }
}


class T1 extends Thread {
    @Override
    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println("子线程enwewnewn" + i);
            if(i==3){
                yield();
            }
        }
    }
}

image-20201001143710092

6.wait 当前线程对象进入wait pool

7.notify notifyAll

唤醒wait pool里面的一个/所有等待线程

线程同步

遇到问题:同时访问同一资源,会遇到问题。

synchronized //在一个线程执行过程中,不会被另一个线程打断

package com.ufo.eight;

public class TestSync implements Runnable {
    Timer timer = new Timer();

    public static void main(String[] args) {
        TestSync test = new TestSync();
        Thread t1 = new Thread(test);
        Thread t2 = new Thread(test);
        t1.setName("t1");
        t2.setName("t2");
        t1.start();
        t2.start();
    }

    public void run() {
        timer.add(Thread.currentThread().getName());
    }
}

class Timer {
    private static int num = 0;

    public synchronized void add(String name) {
//        synchronized (this) {
        num++;
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
        }
        System.out.println(name + ", 你是第" + num + "个使用timer的线程");
//        }
    }
}

死锁:
假如线程A执行过程中,需要锁定对象C1,再锁C2。

接下来另一个线程B,需要先锁C2,再锁C1。

假如这两个线程AB同时运行,A先锁住C1,B先锁住C2,那么这两个线程的另一个需要锁的对象都被对方锁了,导致两个线程都执行不下去。这就是死锁。

程序模拟:

package com.ufo.eight;

public class TestDeadLock implements Runnable {
    public int flag = 1;
    //注意这里!!!static!!静态的!!所以不管new多少个TestDeadLock出来,他的01 02对象只有两个!  所以在加锁时能模拟出死锁的情况。
    static Object o1 = new Object(), o2 = new Object();
    public void run() {
        System.out.println("flag=" + flag);
        if(flag == 1) {
            synchronized(o1) {
                try {
                    Thread.sleep(500);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                synchronized(o2) {
                    System.out.println("1");
                }
            }
        }
        if(flag == 0) {
            synchronized(o2) {
                try {
                    Thread.sleep(500);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                synchronized(o1) {
                    System.out.println("0");
                }
            }
        }
    }

    public static void main(String[] args) {
        TestDeadLock td1 = new TestDeadLock();
        TestDeadLock td2 = new TestDeadLock();
        td1.flag = 1;
        td2.flag = 0;
        Thread t1 = new Thread(td1);
        Thread t2 = new Thread(td2);
        t1.start();
        t2.start();

    }
}

image-20201001164258828程序一直运行,不会结束。。

如何解决?把锁的粒度加粗。就是不要锁那么细,锁整个过程就好了啊。

public class TT implements Runnable {
    int b = 100;

    public synchronized void m1() throws Exception{
        System.out.println("333");
        b = 1000;
        System.out.println("444等待5秒");
        Thread.sleep(5000);
        System.out.println("555");
        System.out.println("b = " + b);
    }

    public synchronized void m2() throws Exception {
        System.out.println("111等待2.5");
        Thread.sleep(2500);
        System.out.println("222");
        b = 2000;
}

    public void run() {
        try {
            m1();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws Exception {
        TT tt = new TT();
        Thread t = new Thread(tt);
        t.start();
        tt.m2();
        System.out.println(tt.b);
    }
}

结果:

111 等待2.5
222
2000
333
444 等待5秒
555
b = 1000

只去掉m1的锁:

111
333
444 等待2.5
222
2000 等待2.5
555
b = 2000

只去掉m2的锁:

111
333
444 等待2.5
222
2000 等待2.5
555
b = 2000

去掉m1,m2的锁:

111
333
444 等待2.5
222
2000 等待2.5
555
b = 2000

所以如果两个方法都改了同一个值,那么这两个方法应该加synchronize

生产者消费者问题

定义篮子,定义馒头,定义生产者,定义消费者。

其中,生产者,消费者都是线程。

篮子有push和pop方法。生产者调用push,消费者调用pop。

生产生放进去的时候判断是否是满的,满的就wait,去除锁。

消费者拿出来,判断是否为空,空就wait,去除锁。

当篮子满了,消费者消费以后,就唤醒所有锁,生产者再次push。

package com.ufo.eight;


public class ProducerConsumer {
    public static void main(String[] args) {
        SyncStack ss = new SyncStack();
        Producer p = new Producer(ss);
        Consumer c = new Consumer(ss);
        new Thread(p).start();
        new Thread(p).start();
//        new Thread(p).start();
        new Thread(c).start();
    }
}

class WoTou {
    int id;
    WoTou(int id) {
        this.id = id;
    }
    public String toString() {
        return "WoTou : " + id;
    }
}

class SyncStack {
    int index = 0;
    WoTou[] arrWT = new WoTou[6];

    public synchronized void push(WoTou wt) {
        while(index == arrWT.length) {
            try {
                this.wait();
                
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        this.notifyAll();
        arrWT[index] = wt;
        index ++;
    }

    public synchronized WoTou pop() {
        while(index == 0) {
            try {
                this.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        this.notifyAll();
        index--;
        return arrWT[index];
    }
}

class Producer implements Runnable {
    SyncStack ss = null;
    Producer(SyncStack ss) {
        this.ss = ss;
    }

    public void run() {
        for(int i=0; i<20; i++) {
            WoTou wt = new WoTou(i);
            ss.push(wt);
            System.out.println("生产了:" + wt);
            try {
                Thread.sleep((int)(Math.random() * 200));
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

class Consumer implements Runnable {
    SyncStack ss = null;
    Consumer(SyncStack ss) {
        this.ss = ss;
    }

    public void run() {
        for(int i=0; i<60; i++) {
            WoTou wt = ss.pop();
            System.out.println("消费了: " + wt);
            try {
                Thread.sleep((int)(Math.random() * 1000));
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

wait和sleep区别

wait是object提供的方法。

sleep是thread提供的方法。

只有在锁定方法里面才能用wait。

wait时别的线程可以访问锁定对象。

QuartusII中文简明使用手册(教程).pdf QuartusII中文简明使用手册(教程)QuartusII中文简明使用手册(教程)QuartusII中文简明使用手册(教程)QuartusII中文简明使用手册(教程)QuartusII中文简明使用手册(教程) 立即下载

相关推荐

彻底卸载Ubuntu双系统,并完美回收100G空间给D盘

本文记录了安全卸载Ubuntu双系统并回收磁盘空间的全过程。作者首先通过Windows命令行彻底清除Ubuntu启动项,避免GRUB引导报错;随后在磁盘管理中删除Linux分区,将100G未分配空间合并至相邻的D盘。针对C盘空间不足问题,作者采用Dism++清理系统文件,并将用户文档、聊天记录等迁移至扩容后的D盘。最终实现了引导纯净、空间合理分配的目标,特别强调分区扩展必须遵循"相邻原则",建议通过间接迁移而非直接扩容来优化系统盘空间管理。

2403_85993278的博客 1512

java操作题23套

文章目录基本操作简单应用综合应用 基本操作 在考生文件夹中存有文件名为Java_1.java的文件,该程序是不完整的,请在注释行"//**********Found**********"下一行语句的下划线地方填入正确内容,然后删除下划线,请勿删除注释行或改动其他已有语句内容。存盘时文件必须存放在考生文件夹下,不得改变原有文件的文件名。 程序的功能是:创建两个线程,每个线程每次会输出一个累计增加的整数和线程名(“第1”或“第2”),共计5次。最后,两个线程输出“运行!”与线程名。程序的某次运行结果如下: 0第

张国荣家的弟弟 4162

告别版本过低提示!微信3.9登录修复与聊天记录无缝迁移全攻略

本文详细解析了微信3.9版本过低提示的根源,并提供了完整的修复方案和聊天记录迁移指南。通过专用修复工具绕过版本检测,以及新旧版本聊天记录目录对比,帮助用户实现无缝迁移。特别提醒备份重要数据,确保操作安全。

weixin_42535461的博客 3165

JAVA基础

int []a = new int[10]; char [] a = new char[10]; String a = new String("abcd"); int []a = new int[]{1, 2, 3}; int [][]b = {{1, 2, 3},{4, 5, 6}}; int [][]b = new int [1

静水流深的博客 348

大型我的世界RPG服务器开服全攻略:从环境配置到插件部署

搭建一个能支撑百人稳定在线的我的世界服务器,远不止选择服务端和安装插件那么简单。服务器架设涉及硬件选型、Java环境、端口放行、启动脚本与systemd守护等基础环节,而大型RPG玩法还依赖MythicMobs、Quests、LuckPerms等插件协同工作。理解这些技术组件的原理与配置逻辑,是确保长线运营的关键。对于希望打造原创剧情、职业副本和自定义Boss的团队而言,合理规划MySQL数据库、RCON批量管理及性能调优,能显著降低后期维护成本。本文围绕RPG服务器核心能力,从环境准备到插件部署,再到常见

weixin_27230891的博客 370

软件工程 作业 流程图与盒图

画出如下程序的流程图与盒图。 START IF p THEN WHILE q DO f END DO ELSE BLOCK G N END BLOCK END IF STOP 流程图与盒图画图如下。

4150

Open3D (C++) 泊松重建【2025最新版】

使用C++版本的Open3D实现点云的泊松重建

点云侠的博客 3077

java jdk6学习笔记良葛格_Java JDK6学习笔记

出版信息林信良 / 清华大学出版社 / 2007-4 / 59.90元内容简介《Java JDK6学习笔记》是作者良葛格本人近几年来学习Java的心得笔记,结构按照作者的学习脉络依次展开,从什么是Java、如何配置Java开发环境、基本的Java语法到程序流程控制、管理类文件、异常处理、枚举类型、泛型、J2SE中标准的API等均进行了详细介绍。本书还安排了一个“文字编辑器”的专题制作。此外,Jav...

weixin_34503235的博客 333

28-3 文件上传漏洞 -白盒审计绕过

这行代码是用来获取文件名中最后一个点(.)后的部分,也就是文件的后缀名。这个函数会返回以最后一个点(.)开始到字符串末尾的部分,包括点(.)本身。然而,这段代码存在一个潜在的安全风险。攻击者可以利用多个点(.)来构造恶意文件名,以绕过后缀名检查。切换到bp将抓到的上传请求发送到重发器然后改包。先上传一个普通的php文件然后使用bp抓包。

weixin_43263566的博客 392

YOLO11改进-注意力-引入自调制特征聚合模块SMFA

SMFA(自调制特征聚合模块): SMFA模块用于协同建模局部和非局部信息,它分为两个分支:一个是EASA(Efficient Approximation of Self-Attention,简化的自注意力分支),用于捕获非局部信息;另一个是LDE(Local Detail Estimation,局部细节估计分支),用于捕获局部细节。EASA通过对输入特征进行下采样,然后利用全局特征的方差进行调制,再与原始特征进行聚合,提取非局部结构信息。LDE分支则通过卷积操作提取输入特征中的高频局部信息。

qq_64693987的博客 2208

java jdk 6学习笔记_java_JDK6_code java学习笔记JDK6课件(PPT)和课本example代码 - 下载 - 搜珍网...

java学习笔记JDK6课件和课本代码java学习笔记JDK6课件和课本代码/codejava学习笔记JDK6课件和课本代码/code/Ajava学习笔记JDK6课件和课本代码/code/A/HelloWorldjava学习笔记JDK6课件和课本代码/code/A/HelloWorld/build.xmljava学习笔记JDK6课件和课本代码/code/A/HelloWorld/META-INFj...

weixin_42131414的博客 245

Tessent ATPG Flow 流程 (代码和注释)

**摘要:Tessent ATPG流程分为五个阶段:1) 环境初始化(加载设计文件、库和扫描链配置);2) DRC规则检查(验证设计可测试性并修复违例);3) ATPG向量生成(设置故障模型并运行引擎优化覆盖率);4) 向量验证与后处理(仿真验证并生成ATE格式文件);5) 进阶操作(多电压域和存储器测试)。流程输出包括测试向量、覆盖率报告和验证日志,支持stuck-at和transition故障模型,使用Tcl脚本控制。关键步骤包含扫描链配置、EDT压缩和覆盖率优化。

QQ_778132974的博客 932

Java6学习笔记31——Java6泛型实例

本文已搬家至【Java学习笔记】Java6泛型实例

gnuhpc的专栏 1145

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Java6学习笔记37——操作zip文件

本文已搬家至【Java6学习笔记】操作zip文件

gnuhpc的专栏 930

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Java学习笔记6

5)

Wi11iam_Lee的博客 1723

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

java学习笔记6

参考资料:【【零基础 快速学Java】韩顺平 零基础30天学会Java】BV1fh411y7R8————————————————————↓集合↓———————————————————集合的体系图如下:单列集合:双列集合:基本介绍:使用方法:使用方法:输出结果:注意:返回的子集合是前闭后开的,fromIndex <= subList < toIndex,在这里是0 <= subList < 2常用方法-练习题由于ArrayList,LinkedList,Vector都属于List接口的实现,因此他们都可以用以

kwert666的博客 616

Java6学习笔记34——Java6中集合框架的学习

本文已搬家至【Java学习笔记】集合框架的学习

gnuhpc的专栏 1390

Java基础学习笔记6

第七章 面向对象设计的基本原则

pamguangyou的专栏 1434

Java6学习笔记36——Java6中java.lang包学习

本文已搬家至【Java学习笔记】java.lang包学习

gnuhpc的专栏 946

Java6学习笔记33——Java6中Comparable接口的实现和使用

本文已搬家至【Java学习笔记】Comparable接口的实现和使用

gnuhpc的专栏 1300

Java基础 学习笔记6

1.Java中的字符串 在 Java 中,字符串被作为 String 类型的对象处理。 String 类位于 java.lang 包中。默认情况下,该包被自动导入所有的程序。 创建 String 对象的方法: 2.Java中字符串的不变性 String 对象创建后则不能被修改,是不可变的,所谓的修改其实是创建了新的对象,所指向的内存空间不同。如下所示: 运行结果: 注意点: a.通过 Str...

weixin_43684054的博客 322

Java6学习笔记70—— FileChannel的学习

本文已搬家至【Java学习笔记】FileChannel的学习

gnuhpc的专栏 1414

Java6学习笔记32——Java6中向量类的使用

本文已搬家至【Java学习笔记】向量类的使用

gnuhpc的专栏 892
上一篇: java基础学习笔记5
下一篇: java基础学习笔记7
UFOO2
博客等级 码龄6年 7粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值