线程:
多线程的好处:解决了在一个进程中同时执行多个任务代码的问题。
自定义线程的创建方式:
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:0main:0sony:1main:1sony:2main:2sony:3sony:4main:3sony:5main:4sony:6main:5sony:7main:6sony:8sony:9sony:10sony:11sony:12sony:13sony:14sony:15sony:16sony:17sony:18sony:19sony:20sony:21sony:22sony:23sony:24main:7sony:25main:8sony:26main:9sony:27main:10sony:28main:11sony:29main:12sony:30main:13main:14sony:31main:15sony:32main:16sony:33main:17main:18sony:34main:19main:20sony:35main:21sony:36sony:37sony:38main:22sony:39main:23sony:40main:24main:25main:26sony:41main:27sony:42main:28sony:43main:29sony:44main:30sony:45main:31sony:46main:32sony:47main:33sony:48main:34sony:49main:35main:36main:37main:38main:39main:40main:41main:42main:43main:44main:45main:46main:47main:48main:49
注意事项:
同步代码块的锁 可以是任意的对象。但是同步锁对象必须是多线程共享的对象,否则锁不住。同步函数的锁 是固定的 非静态函数的锁对象是 this对象,静态函数的锁对象时 class对象。在同步代码块或同步函数中调用sleep方法是不会释放锁对象的。如果调用的wait方法是会释放锁对象的。