初识JAVA5(线程)

来源:互联网 发布:网站编程入门 编辑:程序博客网 时间:2024/06/05 09:01

1.Thread类和Runnable接口在java.lang下,可以用来创建多线程程序。
2.调用一个线程的时候需要创建一个类去继承Thread类,并且实例化的时候,对象要用.start()去启动,不是调用里面的方法名字启动:下图声明了两个A类,就是两个线程。
这里写图片描述
一定要有一个无参无返回值的run方法,是start后要运行的,run方法里面是真正的线程语句。
3.Runnable接口里面有抽象方法run();
这里写图片描述
创建类去实现它。上图的B不能使用start(),如果创建了类实例化Runnable接口,那么
就必须用Thread类去包装实例化对象,最后通过Thread的对象启动多线程:
这里写图片描述
4.中断线程
这里写图片描述
但其实用一些变量去限制也可以中断线程,比如上图中for里的i小于100,这就是个终止线程的条件。
5.两种线程创建方式比较:
这里写图片描述
6. 线程的生命周期
这里写图片描述
7.线程的状态
这里写图片描述
阻塞事件有sleep状态。
例如:Thread.currentThread().sleep(2000)使进程休眠2秒。也就是Blocked。
System.out.println(Thread.current.isAlive());输出线程现在的转态。
8.调度和优先级
用 对象名.setPriority(MIN_PRIORITY / MAX_PRIORITY / NORMAL_PRIORITY);设置优先级。
这里写图片描述
9.yield()让出时间片
这里写图片描述
比如k1线程执行了,遇到yield(),则它会等待k2。就会变成一个线程执行,另一个线程等待,两个结果交替出现。
10.控制线程(join()方法)
这里写图片描述
写在main()方法中的程序叫做主线程,不写在里面的都叫做第二线程(副线程)。

2行:要想使用join();必须抛出异常,所以throws Exception;
这段代码有三个线程,主线程,新线程,join线程,当join线程执行时,主线程不执行,新线程也属于副线程,所以只有新线程和join线程抢时间片。
11.守护线程
这里写图片描述
这里写图片描述
这里写图片描述
将setDaemon设成true就可以标记成守护线程。false就是用户方法。
12.线程同步synchronized
当两个人同时对一个银行账户进行取钱的时候,账户里只有100,可是俩人每人取100,如果同时操作,结果可能取出200。这是不允许的。

可以如下方法解决:
加锁—–>修改完成—->释放锁
这样可以防止对一个代码段同时进行操作。
synchronized(对象名)意思就是给对象锁上,同步下面的代码段。
这里写图片描述

第二种同步,方法同步:
这里写图片描述

0 0
原创粉丝点击