黑马程序员_JavaSE的其他流和多线程

来源:互联网 发布:软件构件具备属性 编辑:程序博客网 时间:2024/06/07 23:15
------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

1:数据操作流(操作基本类型数据的流)
(1)可以操作基本类型的数据
(2)流对象名称 DataInputStreamDataOutputStream
2:打印流
(1)字节打印流,字符打印流
(2)特点: A:只操作目的地,不操作数据源 B:可以操作任意类型的数据C:如果启用了自动刷新,在调用println()方法的时候,能够换行并刷新
D:可以直接操作文件
(3)复制文本文件
BufferedReader br = new BufferedReader(new FileReader("a.txt"));
PrintWriter pw = new PrintWriter(new FileWriter("b.txt"),true);

String line = null;
while((line=br.readLine())!=null) {
pw.println(line);
}

pw.close();
br.close();
3:标准输入输出流
(1)System类下面有这样的两个字段in 标准输入流out 标准输出流

(2)三种键盘录入方式A:main方法的args接收参数

B:System.in通过BufferedReader进行包装BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

C:Scanner Scanner sc = new Scanner(System.in);
(3)输出语句的原理和如何使用字符流输出数据
A:原理
System.out.println("helloworld");

PrintStream ps = System.out;
ps.println("helloworld");
B:把System.out用字符缓冲流包装一下使用

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

4:多线程
(1)多线程:一个应用程序有多条执行路径
(2)JVM的启动是多线程的,因为它最低有两个线程启动了,主线程和垃圾回收线程。
(3)多线程的实现方案
A:继承Thread类

public class MyThread extends Thread {
public MyThread() {
}
public MyThread(String name){
super(name);
}
@Override
public void run() {
for (int x = 0; x < 100; x++) {
System.out.println(getName() + ":" + x);
}
}
}

public class MyThreadDemo {
public static void main(String[] args) {
 MyThread my1 = new MyThread();
 MyThread my2 = new MyThread();
 my1.setName(“张三");
 my2.setName("李四");
 my1.start();
 my2.start();

//带参构造方法给线程起名字
// MyThread my1 = new MyThread("张三");
// MyThread my2 = new MyThread("李四");
// my1.start();
// my2.start();
System.out.println(Thread.currentThread().getName());

B:实现Runnable接口

public class MyRunnableDemo {
public static void main(String[] args) {
// 创建MyRunnable类的对象
MyRunnable my = new MyRunnable();
// Thread(Runnable target, String name)
Thread t1 = new Thread(my, "
张三");
Thread t2 = new Thread(my, "
李四");
t1.start();
t2.start();
}
}

public class MyRunnable implements Runnable {
@Override
public void run() {
for (int x = 0; x < 100; x++) {
// 由于实现接口的方式就不能直接使用Thread类的方法了,但是可以间接的使用
System.out.println(Thread.currentThread().getName() + ":" + x);
}
}
}


(4)线程的调度和优先级问题
A:线程的调度  a:分时调度 b:抢占式调度 (Java采用的是该调度方式)
B:获取和设置线程优先级 a:默认是5 b:范围是1-10
(5)线程的控制 A:休眠线程 B:加入线程 C:礼让线程 D:后台线程 E:终止线程
(6)线程的生命周期 A:新建 B:就绪 C:运行 D:阻塞 E:死亡
(7)同步解决线程安全问题
A:同步代码块
synchronized(对象) {
需要被同步的代码;
}
这里的锁对象可以是任意对象。
B:同步方法 把同步加在方法上。 这里的锁对象是this

0 0