多线程(概述)进程: 是一个正在执行中的程序。(每一个进程执行都有一个执行顺序——该顺序是一个执行路径,或者叫做一个控制单元) 线程: 就是进程中的一个独立控制单元(线程在控制着进程的执行) **一个进程中至少有一个线程。 主线程: Java VM启动的时候会有一个进程java.exe。(该进程中至少有一个线程负责java程序的执行,而且这个线程运行的代码存在于main方法中) 创建线程的第二种方式:实现Runnable接口 步骤: 1、定义类实现Runnable接口。 2、覆盖Runnable接口中的run方法。(将线程运行的代码存放在该run方法中) 3、通过Thread类建立线程对象。 1、将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。 (为什么要将Runnable接口的子类对象传递给Thread的构造函数? 因为:自定义的run方法所属的对象是Runnable接口的子类对象。所以,要让线程去指定对象的run方法,就必须明确该run方法所属对象。) 2、调用Thread类的start方法开启线程并调用Runnable接口子类的run方法。 实现方式和继承方式有什么区别呢? 实现方式好处:避免了单继承的局限性。(在定义线程时,建议使用实现方式) StringBuffer(常见功能——添加)定义:字符串缓冲区(容器)。 特点:长度是可变化的;可以直接操作多个数据类型;最终通过tostring()方法变成字符串。 功能:CURD(C—create;U—update;R—read;D—delete) 1、存储: StringBuffer append():将制定数据作为参数添加到已有数据结尾处。 StringBuffer insert(index,数据):可以将数据插入到制定index位置。 2、删除 StringBuffer delete(start,end):删除数据,包含start不包含end。 StringBuffer deleteCharAt(index):删除制定位置上的数据。 3、修改 Char charAt(); Int indexOf(Stirng str); Int lastindexOf(String str); Int length(); String substring(int start,int end); 4、查找(获取) StringBuffer replace(start,end,string); Void setCharAt(int index,char ch); 5、反转 StringBuffer reverse(); 6、将缓冲区中指定数据存储到指定字符数组中 Void getChars(int srcBegin, int srcEnd, char[] chs,int chsBegin); StringBuffer的简易替代StringBuilder(JDK 1.5版本以后出现) StringBuffer:线程同步。 StringBuilder:线程不同步。 升级三因素:提高效率;简化书写;提高安全性。 |
|