第一节:
1,线程:线程是程序的一条路径,一个进程可以又多条线程;
多线程可以提高效率;
第二节:
1,并行:两个任务同时刻进行,需要多核cpu;
并发:两个任务轮流进行;但是感觉是两个一块进行
第三节:
1,java启动jvm,启动了一个进程(启动了一个程序),启动后会启动垃圾回收线程和主线程,所以java是多线程的!
第四节:
实现多线程方式1:
重写thread类run方法,然后通过start方法开启线程调用run方法;
第五节:
实现多线程方式2:实现runnable,利用thread传入runnable引用,通过start调用run(),如果target不为空调用子类的run;
第六节:
//睡眠
thread.sleep(1000ms);
//获取名字:
thread.currentthread.getName();
thread.getName();
t.setDaemon(true):当其他线程关闭后t线程也会关闭
//加入线程
t.join(i);加入线程t,执行ims,i可以去除(方法的重载)
//让出cpu
thread.yield();
//设置优先级:
t1.setPriority(i);i在1-10之间;
第七节:
//同步代码块;
使用synchronized关键字加上一个锁对象,来定义一段代码,这就是同步代码块;
多个同步代码块如果使用相同的锁对象,那么就是同步的;
//注意:
锁对象不能用匿名的对象,因为匿名的对象不是一个对象;
//非静态的同步方法的锁对象
非静态的同步方法的锁对象是this
静态的同步方法的锁对象是类名.class;(字节码对象)
new Thread() {
public void run() {
while(true) {
p.print1();
}
}
}.start();
class Printer {
Demo d = new Demo();
public void print1() {
//synchronized(new Demo()) { //同步代码块,锁机制,锁对象可以是任意的
synchronized(d) {
System.out.print("黑");
System.out.print("马");
System.out.print("程");
System.out.print("序");
System.out.print("员");
System.out.print("\r\n");
}
}
第八节
多线程同步代码块不能够嵌套,否则容易死锁;尽量不要嵌套使用;
vector是线程安全的;Arraylist是线程不安全的;
StringBuffer线程安全 Stringbuilder线程不安全
HashTable线程安全,HashMap线程不安全;
为了保证线程安全,可以使用collection包装,collections.sychronizedList/map();
网友评论