JAVA_02 线程

来源:互联网 发布:普希金怎么死的 知乎 编辑:程序博客网 时间:2024/05/23 00:31

多线程:

进程:是一个正在执行的程序。

每一个进程执行都有一个执行顺序。该顺序是一个执行路径。


线程:进程的的一个独立控制单元

线程名称:this.getName()

状态:  运行状态 、 临时状态 、 冻结状态 、 消亡状态

为什么要覆盖run方法?

Thread类用于描述线程。

该类就定义了一个功能,用于存储线程要运行的代码。该存储功能就是run方法


步骤:

1、定义类继承Thread

2、覆写Thread类中run方法

3、调用线程start方法  (作用: 启动线程,调用run方法)


方式1   (通过继承Thread):
Demo.java
public class Demo {public static void main(String[] args) {Test t = new Test();t.start();for(int i=0;i<60;i++){System.out.println("--跑起来了" + i);}}}

Test.java
public class Test extends Thread{//覆写run方法public void run(){for(int i=0;i<60;i++){System.out.println("++跑起来了" + i);}}}

方式2   (通过实现Runnable接口):
Test.java
public class Test {public static void main(String[] args) {Demo d = new Demo();Thread d1 = new Thread(d);Thread d2 = new Thread(d);Thread d3 = new Thread(d);Thread d4 = new Thread(d);d1.start();d2.start();d3.start();d4.start();}}

Demo.java
public class Demo implements Runnable{private static int tick = 100;public void run(){while(true){if(tick>0){tick--;System.out.println(Thread.currentThread().getName()+"卖票喽,还剩"+tick+"张");}}}}

区别:继承了Thread之后就不能继承其他类   但接口可以多实现

通过构造函数修改线程名称:

public class Test extends Thread{//通过构造函数修改线程名称public Test(String name) {super(name);}//覆写run方法public void run(){for(int i=0;i<60;i++){System.out.println(this.getName()+"***跑起来了" + i);}}}

线程锁

当多条操作执行同一个共享数据时,为了安全问题,使用线程锁 (同步代码块)。
synchronized (随意对象) {需要被同步的代码}
public class Demo implements Runnable{Object obj = new Object();private static int tick = 1000;public void run(){while(true){synchronized (obj) {//线程锁if(tick>0){System.out.println(Thread.currentThread().getName()+"卖票喽,还剩"+--tick+"张");}}}}}

方法2: 直接在函数前假关键字:synchronized  (慎用)
缺点:容易吧不需要同步的代码一起包含,造成单线程。

同步函数的锁时this
静态同步方法的锁是:类名.class












0 0
原创粉丝点击