2020-07-30(线程问题)

2020-08-08  本文已影响0人  残烛_商志飞

第一节:

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();

上一篇 下一篇

猜你喜欢

热点阅读