Java
Devilamaycry
我想,我能够一步又一步地走下去!
展开
-
Java-对实体类重写toString方法
可以直接在实体类中重写toString()方法,可以方便list将该实体类的内容输出。 int s =random.nextInt(100); s =random.nextInt(10000)+5000; //textLocalRate.setText(s+"位"); HotAddress ha1 = new HotAddress(); ha1.se原创 2021-01-10 15:43:37 · 848 阅读 · 0 评论 -
Java-如何对复杂的List按目标值进行排序
1.调用函数对list对象排序关键函数:Collections.sort(hotAddressList);完整示例: HotAddress ha1 = new HotAddress(); ha1.setAddress("五一广场"); ha1.setRate(s); hotAddressList.add(ha1); int s = rando原创 2021-01-10 15:38:10 · 280 阅读 · 0 评论 -
Java[学习总结] -多线程(八)之线程池
1.Executor概念(1)线程池简化了线程的管理工作,Java 提供了一种灵活的线程池实现作为Executor框架的一部分任务执行的主要抽象不是Thread,而是Executor。(2)Executor作为灵活且强大的异步执行框架,其支持多种不同类型的任务执行策略,提供了一种标准的方法将任务的提交过程和执行过程解耦开发,基于生产者-消费者模式,其提交任务的线程相当于生产者,执行任务的线程相当于消费者,并用Runnable来表示任务,Executor的实现还提供了对生命周期的支持,以及统计信息收集,原创 2020-12-20 20:20:58 · 92 阅读 · 0 评论 -
Java[学习总结]-多线程(七)之线程之间的协作
1.wait()1.1 概念方法wait()的作用是使当前执行代码线程进行等待,是Object类的方法,该方法用来将当前线程置于“阻塞队列”中,并在wait()所在的代码处停止执行(被挂起),直到接到通知被唤醒。1.2要求在调用wait()之前,线程必须持有该对象的对象级别锁,只能在同步方法或者是同步块中调用此方法。在执行wait方法后,当前线程释放锁。会和其他线程竞争重新获得锁。如果调用wait方法没有持有锁,则会抛出异常。2.notify()2.1 概念该方法用来通知那些可能等待该对象的对原创 2020-12-20 19:50:24 · 75 阅读 · 0 评论 -
Java[学习总结]-多线程(六)之ThreadLocal类
1.为什么要使用ThreadLocal类1.1class ConnectionManager {private static Connection connect = null;public static synchronized Connection openConnection(){if(connect == null){connect = DriverManager.getConnection();}return connect;}public static synchronize原创 2020-12-20 17:29:59 · 101 阅读 · 0 评论 -
Java[学习总结]-多线程(五)之线程的同步
1.为什么要让线程同步(1)当多个线程同时访问同一个数据的时,非常容易出现线程安全。“非线程安全”问题存在于“实例变量”中,如果是方法内部的私有变量,则不存在“非线程安全”问题,所得到的结果也就是“线程安全”的。(2)如果多个线程共同访问1个对象中的实例变量则有可能出现“非线程安全”。(3)当多个线程对共享一个变量的时候,会产生”非线程安全”问题。会导致在操作过程中会出现值被改变,值不同步的情况,进而影响程序的执行流程。例如在某些JVM中,i–(非原子操作)的操作分为如下三步:取得原值i值加载到寄存器原创 2020-12-20 13:22:37 · 234 阅读 · 2 评论 -
Java[学习总结]-多线程(四)之控制线程
1.Sleep()方法sleep方法是Thread类的一个静态方法 try{ Thread.sleep(“5* 60* 1000”); }catch(InterruptedException ex){ }//java.lang中提供的两种sleep()方式 /** * Causes the currently executing thread to sleep (temporarily cease * execution) for the specified numb原创 2020-12-19 22:10:55 · 103 阅读 · 1 评论 -
Java[学习总结]-多线程(三)之多线程的生命周期
1.概念引入当线程被创建并启动以后,它既不是一启动就进入执行状态,也不是一直处于执行状态,在线程的生命周期中,它要经过新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)五种状态。注意:理解其生命周期需要结合多线程所运行的并发机制来执行,一方面我们需要理解其生命周期的执行方式以及存在意义,同时也要学会它的语法。2.新建状态(1)new成功创建线程,未调用start()方法当程序使用new关键字创建一个线程后,该线程就处于新建状态,但是还没有在该原创 2020-12-18 18:07:51 · 77 阅读 · 1 评论 -
Java[学习总结]-多线程(二)之Callable和FutureTask
1.使用意义从JDK1.5之后,Java提供了Callable接口,实|际_上就是Runnable接口的增强版。提供call方 法作为线程执行体,但是功能更加强大。Call方法可以有返回值,Call方法可以抛出异常。public interface Callable<V>{V call() throws Exception; .}2.使用Future(1)在并发编程时,一般使用runnable,然后给线程池,这种情况下不需要线程的结果。所以run()的返回值是void类型。如果是一原创 2020-12-18 10:34:53 · 594 阅读 · 0 评论 -
Java[学习总结]-多线程(一)之线程的概念及创建方式
1.并发和并行在了解线程之前,我们首先要区分并行和并发的区别:并行指的是在同一时刻,有多条指令在多个CPU上同时运行。并发指的是在同一时刻,只有一条指令运行在单一CPU上,但是由于每条指令的执行时间和切换时间都很快,所以在宏观上给人以多条指令同时运行的感觉。2.进程和线程(1)当我们打开任务管理器时,在进程这一栏会看到每个正在运行的程序,通常把这些正在运行的程序认为是一个个的任务,这个进程包含许多顺序执行流(子任务),这些执行流可以以并发的方式运行,这就是多线程。(2)CPU将轮流划分时间给每个原创 2020-12-17 23:36:05 · 126 阅读 · 0 评论 -
Java[学习总结]-泛型
1.泛型的引入背景在未引入泛型时,人们只能确定具体的数据类型,代码无法通用,为了解放这种限制,引入了泛型机制。在没有泛型之前,一-旦把一个对象“丢进”Java集合中,集合就会忘记对象的类型,当再次|取出该对象的时候,该对象的编译类型就变成了Object类型(运行时的类型没有变换)。当进行强制类型转换会增加程序的复杂度,也可能引入ClassCastException.2.集合类中使用泛型从JDK1.5以后,Java引入了“类型参数化(parameterized-type)”的概念,允许我们在创建集合的原创 2020-12-16 21:08:43 · 148 阅读 · 0 评论 -
Java[学习总结]-String类型学习记录
1.概念char类型只能表示一个单字符。为了表示一串字符,使用String(字符串)的数据类型。String message = "Welcome to Java";注意: String类型不是基本类型,而是引用类型。引用类型声明的变量称为引用变量,它引用的是一个对象,一个指向内存的地址。这里,message是-一个引用类型它引用一个内容为WelcometoJava的字符串对象。2.利用length()获取字符串长度message.length()3.连接字符串可以使用方法contact连原创 2020-12-15 21:30:05 · 129 阅读 · 2 评论 -
Java-“|”运算与“||”运算
1.“|”是二进制中的位运算,符号两边的都都会执行,又称为短路运算。2.“||”是逻辑运算,如果前面的成立,则不再执行后面的方法。 b = i < 10 | methodB(4); b = i < 10 || methodB(8);...原创 2020-12-15 20:01:57 · 1058 阅读 · 1 评论 -
Java-参数传递
1.给方法传递数组参数Java通过传值来给方法传递参数。传递基本数据类型和传递数组有很大的区别。传基本数据类型原始数据类型参数,传递实际数值.在方法里面改变该参数的值不影响方法外实参的值.传数组(引用数据类型)对于数组类型参数,传的是数组的引用。对数组的任何改变将会影响原始数组的内容。引用数据类型都会改变原对象的值。...原创 2020-12-15 17:35:01 · 64 阅读 · 0 评论 -
Java[学习总结]-一维数组
一维数组的定义一维数组的定义有两种方式int[] a ;//int b[];//建议使用int[] a的方式来声明,int本身为基本类型,而int[ ]为引用类型,同时在int[ ] a定义时是无法确定数组长度的,此时只是定义了一个指针,并未指向任何有用的内存,此时的a,b都无法使用.数组的初始化一维数组的初始化分为静态初始化和动态初始化。(1)动态初始化:只指定数组的长度,由系统为数组中的每个变量赋初始值int[] a = new int[5];注意整数类型:则数组元素的值.原创 2020-12-15 16:43:56 · 485 阅读 · 1 评论