泛型
泛型是程序设计语言的一种特性。允许程序员在强类型程序设计语言中编写代码时定义一些可变部分,那些部分在使用前必须作出指明。各种程序设计语言和其编译器、运行环境对泛型的支持均不一样。将类型参数化以达到代码复用提高软件开发工作效率的一种数据类型。泛型类是引用类型,是堆对象,主要是引入了类型参数这个概念
泛型类的定义
修饰符 class 类名<T>
泛型接口的定义
public interface 接口名 <T>
泛型接口的定义
[public ] [static]<T> 返回值类型 方法名(T参数)
线程
程序 进程 线程
程序(program)是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码。(静态的代码)
进程(process)就是正在执行的程序,从Windows角度讲,进程是含有内存和资源并安置线程的地方。(运行中的代码,加载到内存中执行)
线程(thread):进程可进一步细化为线程,是一个进程内部的最小执行单元。
线程和进程的关系
一个进程可以包含多个线程,一个线程只能属于一个进程,线程不能脱离进程而独立。
每一个进程至少包含一个线程(称为主线程);在主线程中开始执行程序,Java程序的入口main()方法就是在主线程中被执行的。
在主线程中可以创建并启动其它的线程。
一个进程内的所有线程共享该进程的内存资源。
并发并行的区别:
并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。
并行是在不同实体上的多个事件,并发是在同一实体上的多个事件。
并行是在多台处理器上同时处理多个任务。如hadoop分布式集群,并发是在一台处理器上“同时”处理多个任务。
多线程
多线程:在一个进程内,同时拥有多个线程。
多线程是指程序(进程)中包含多个执行单元,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。
什么时候需要多线程
程序需要同时执行两个或多个任务(任务/线程 都是各自独立的)。如360安全卫士可以同时进行电脑检测、木马查杀、垃圾清理等。
多线程的优点
同时执行多个任务,功能强大。
提高CPU利用率, CPU执行是以线程为单位的。
改善程序结构,将复杂任务分为多个线程,独立运行。
多线程的缺点
线程越多,对内存、CPU的占用就越高(硬件升级)。
多线程需要协调和管理,所以需要CPU时间跟踪线程。
多个线程对同一个共享的资源进行访问,会出现各种不正常的情况。解决办法:线程同步 (效率低但是安全)。
Thread 线程类
Thread类中的方法
Thread类实现了Runnable接口,在Thread类中,有一些比较关键的属性,比如name是表示Thread的名字,可以通过Thread类的构造器中的参数来指定线程名字,priority表示线程的优先级(最大值为10,最小值为1,默认值为5),daemon表示线程是否是守护线程,target表示要执行的任务。
下面是Thread类中常用的方法:
1.start()
start()用来启动一个线程,当调用start()方法后,系统才会开启一个新的线程来执行用户定义的子任务,在这个过程中,会为相应的线程分配需要的资源。
2.run()
run()方法是不需要用户来调用的,当通过start()方法启动一个线程之后,当线程获得了CPU执行时间,便进入run方法体去执行具体的任务。注意,继承Thread类必须重写run()方法,在run()方法中定义具体要执行的任务。
3.sleep()
sleep方法有两个重载版本:
sleep(long millis) //参数为毫秒
sleep(long millis,int nanoseconds) //第一参数为毫秒,第二个参数为纳秒
数组复习
数组
数组Array,标志是[ ] ,用于储存 多个相同类型数据 的集合
1、一维数组
1)创建数组
动态初始化
int[] a=new int[5];
静态初始化
int[] b = new int[]{1,2,3,4,5};
int[] c = {1,2,3,4,5};
数组名是个引用类型的变量,它保存着的是数组的地址,不是数组中的数据数组
数组命名方式
一维数组:int[] x 或者int x[]
二维数组:二维数组:int[][] y 或者 int[] y[] 或者 int y[][]