Java基础学习 —— 线程

线程:

多线程的好处:解决了在一个进程中同时执行多个任务代码的问题。

自定义线程的创建方式:

1.自定一个类继承thread类,重写thread的run方法 吧自定义线程的任务代码写在run方法内,创建thread子类的对象并且调用start()方法启动线程。

2.自定义一个类实现runnable接口,实现runnable接口中run方法,吧自定义线程的任务代码写在run方法内部,创建runnable实现类的对象 ,创建thread对象并且把runnable实现类的对象作为参数传递,调用thread对象的start方法开启线程。
线程安全问题出现的根本原因:
必须存在着两个或者两个以上的线程共享一个资源。
操作共享资源的代码必须有两句或者有两句以上
线程安全问题的解决方案:
同步代码块解决
synchronized(锁){
需要被同步的代码
}
同步行数解决:
修饰符 synchronized 函数名(形参列表。。。){
}

 1 public class demo1 extends Thread{
 2     
 3     public demo1(String name) {
 4         super(name);
 5     }
 6     public void run() {
 7         for (int i = 0; i < 50; i++) {
 8             System.out.println(Thread.currentThread().getName()+":"+i);
 9         }
10     }
11     public static void main(String[] args) {
12         demo1 demo1 = new demo1("sony");
13         demo1.start();
14         for (int i = 0; i < 50; i++) {
15             System.out.println(Thread.currentThread().getName()+":"+i);
16         }
17     }
18 }
sony:0
main:0
sony:1
main:1
sony:2
main:2
sony:3
sony:4
main:3
sony:5
main:4
sony:6
main:5
sony:7
main:6
sony:8
sony:9
sony:10
sony:11
sony:12
sony:13
sony:14
sony:15
sony:16
sony:17
sony:18
sony:19
sony:20
sony:21
sony:22
sony:23
sony:24
main:7
sony:25
main:8
sony:26
main:9
sony:27
main:10
sony:28
main:11
sony:29
main:12
sony:30
main:13
main:14
sony:31
main:15
sony:32
main:16
sony:33
main:17
main:18
sony:34
main:19
main:20
sony:35
main:21
sony:36
sony:37
sony:38
main:22
sony:39
main:23
sony:40
main:24
main:25
main:26
sony:41
main:27
sony:42
main:28
sony:43
main:29
sony:44
main:30
sony:45
main:31
sony:46
main:32
sony:47
main:33
sony:48
main:34
sony:49
main:35
main:36
main:37
main:38
main:39
main:40
main:41
main:42
main:43
main:44
main:45
main:46
main:47
main:48
main:49
View Code

 

注意事项:
同步代码块的锁 可以是任意的对象。但是同步锁对象必须是多线程共享的对象,否则锁不住。
同步函数的锁 是固定的 非静态函数的锁对象是 this对象,静态函数的锁对象时 class对象。
在同步代码块或同步函数中调用sleep方法是不会释放锁对象的。如果调用的wait方法是会释放锁对象的。

posted @ 2017-09-05 15:59  CosmosbipinnatusCav  阅读(154)  评论(0编辑  收藏  举报