【语法】
变量声明
语句结构 if for switch.....
数组
方法
【思想】
首先定义类 = 属性 +行为 = 名词 + 动词
有类就能产生对象
封装 = 类 方法 person private
继承 = 可维护性,提高了代码的可用行
多态 = 父类引用指向子类对象 好处:提高了代码的扩展性(通用性)
【API】应用程序编程接口
集合IO字符串
类
方法
我们学过得API
string
获取 charAt()
判断
截取
装换
切割
集合体系
单列
Collection
List Set
ArrayList HashSet LinkedHashSet
LinkedList TreeSet
双列
Map
HashMap
Properties
IO体系
字符
输入 Reader FileReader BufferedReader InputStreamReader
输出 Writer FileWiter BufferedWriter OutputStreamWriter PrintWriter
字节
输入
其他类
【多线程概述&多线程实现】
【关键字】
Thread[丝瑞德]
Runnable[run雷柏]
currentThread[卡瑞尔特 丝瑞特]
* 多线程的实现方式:
* 方式1:一种方法是将类声明为 Thread 的子类。该子类应重写 Thread 类的 run 方法。接下来可以分配并启动该子类的实例
*
* Thread[丝瑞德]
* String getName() 返回该线程的名称。
* void setName(String name) 改变线程名称,使之与参数 name 相同。
*
*
* CPU执行程序的随机性
方式1:一种方法是将类声明为 Thread 的子类。该子类应重写 Thread 类的 run 方法。接下来可以分配并启动该子类的实例
1. 创建一个类,继承Thread
2. 重写run()
3. 创建一个Thread子类对象
4. 线程子类对象 .start()
//创建线程实例
MyThread mt = new MyThread("张三");
//修改线程名字
mt.setName("张三");
//启动线程
mt2.start();
Runnable[run雷柏]
currentThread[卡瑞尔特 丝瑞特]
多线程实现方式2:
*
* 创建线程的另一种方法是声明实现 Runnable 接口的类。该类然后实现 run 方法。然后可以分配该类的实例,在创建 Thread 时作为一个参数来传递并启动
*
* Thread(Runnable target)
* static Thread currentThread() :返回当前线程对象
*
*
* 既然有了继承Thread为何还要整出来实现Runnable?
*/
方式二
1. 写一个类,实现Runnable
2. 在实现类中重写run()方法
3. 创建一个Thread线程对象,传递一个Runnable实现类对象,
4. 启动线程
打破java只支持单一继承
//创建线程实例
MyThread2 mt = new MyThread2(100);
Thread t = new Thread(mt);
t.setName("李四");
//启动线程
t.start();
上锁
1, 多线程环境下运行
2, 数据是否被共享
synchronized[思英扣若莱z的]
(同步,可以修饰代码块和方法,被修饰的代码块和方法一旦被某个线程访问,则直接锁住,其他的线程讲无法访问)
同步代码块
synchronized(锁对象){
}
注意:
1. 同步代码块加在哪里? 操作共享数据的地方
2. 锁 ---> 被所有线程共享
3. 加完锁之后,多思考异步,能不能减少锁的校验次数,提高效率
注意:锁对象需要被所有的线程所共享
同步:安全性高,效率低
非同步:效率高,安全性低,
StringBuilder 异步 不安全 效率高(单线程环境下使用)
StringBuffer 同步 安全 效率低 (多线程环境下使用)
注意:有锁的地方一定要双重判断,作用是 提升效率
第一次判断是否为ture
第二次判断锁是否打开
【同步代码】synchronized[思英扣若莱z的]
格式:
public synchronized void method(){
}
synchronized
非静态同步方法的锁对象是this
静态的同步方法对象是 当前类的字节码对象
|
|