知识梳理之多线程

1、两种实现形式,继承Thread类,实现Runnable接口,Thread也是实现了Runnable接口,Thread源码中有一个target对象,Runnable类型。可通过这种方法实现多个线程的资源共享,如下:

public class Main {
public static void main(String[] args) {
Runnable test = new TestThread();
new Thread(test).start();
new Thread(test).start();
}
}


/**
*
* @author Jerome
*/
public class TestThread implements Runnable {
int count = 0;

@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(count++);
}
}
}

运行结果如下:
[img]http://dl2.iteye.com/upload/attachment/0101/2706/0996807b-0c73-324d-a855-6d95fc9def19.png[/img]

两个线程共享了变量count;

2、线程通过wait进入阻塞状态,即等待获取锁,一般的锁为this(当前线程)必须调用notify唤醒之后才能继续被分配cpu资料运行;


synchronized (this) {
this.wait();
}

this.notify();

wait()和notify()因为会对对象的“锁标志”进行操作,所以它们必须在synchronized函数或synchronized代码块中进行调用。
3、终止线程有3中方法,设置标志位(run方法运行正常退出),调用interrupt(),调用stop(),后面两种是让线程抛出异常而退出,不推荐;
4、sleep不会释放锁标志;
5、所谓的线程之间保持同步,是指不同的线程在执行同一个对象的同步代码块时,因为要获得对象的同步锁而互相牵制,不同对象不存在同步的问题;
6、synchronized 关键字能够修饰一个对象实例中的函数或者代码块。 在一个非静态方法中 this 关键字表示当前的实例对象。 在一个 synchronized 修饰的静态的方法中,这个方法所在的类使用 Class 作为实例对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值