您的位置:首页 > 职场人生

黑马程序员——javaSE_多线程

2015-11-28 10:51 363 查看
-------
android培训、java培训、期待与您交流! ----------

进程:正在进行中的程序。其实进程就是一个应用程序运行时的内存分配空间。

线程:其实就是进程中一个程序执行控制单元,一条执行路径。进程负责的是应用程序的空间的标示。线程负责的是应用程序的执行顺序。

进程中最少有一个线程

多线程特性

1.随机性

2.谁强盗谁执行,至于执行多长,由CPU说了算

返回当前线程的名称:Thread.currentThread().getName()

线程的名称是由:Thread-编号定义的。编号从0开始。

线程要运行的代码都统一存放在了run方法中。

线程要运行必须要通过类中指定的方法开启。start方法。(启动后,就多了一条执行路径)

start方法:1)、启动了线程;2)、让jvm调用了run方法。

创建线程的第一种方式:继承Thread ,由子类复写run方法

public class Test {
public static void main(String[] args) {
MyThread t = new MyThread();
t.start();
}

}
class MyThread extends Thread{
public void run(){
for(int x = 1;x<=100;x++){
System.out.println(x);
}
}
}
创建线程的第一种方式:实现Runnable接口,实现run方法

实现方式的好处:避免了单继承的局限性


public class Test {
public static void main(String[] args) {
MyThread m = new MyThread(); //创建该对象
Thread t = new Thread(m);//建立Thread对象把实现了Runnable接口的对象以参数形式传入Thread构造函数中
t.start();//调用start方法开启线程
}

}
class MyThread implements Runnable{
public void run(){
for(int x = 1;x<=100;x++){
System.out.println(x);
}
}
}


获取线程名称:getName();  Thread-编号  编号从0开始

多线程的安全问题

问题原因:当多个线程在操作同一个共享数据时,一个线程执行了一部分,还没执行,另一个线程参与进来了,导致数据的错误。
解决方法:对个线程操作共享的语句,只能让一个线程执行完,在执行的过程中,其他线程不可以参与进来执行。

java提供了解决多线程安全问题的方式,就是同步

好处:解决了线程安全问题。

弊端:相对降低性能,因为判断锁需要消耗资源,产生了死锁。

同步的前提

1.必须有两个以上的线程
2.必须是多个线程使用同一个锁

同步有三种

1.同步代码块,可以使用任意对象作为锁
2.同步函数,固定是this锁
3.静态同步函数,固定是所属类名.class
举例(多线程卖票例子)
public class Test {
public static void main(String[] args) {
Sell s = new Sell();
Thread t1 = new Thread(s);
Thread t2 = new Thread(s);
t1.start();
t2.start();
}
}
class Sell implements Runnable{
private int PI = 100;
Object obj = new Object();
public void run() {
while(true){
synchronized(obj){
if(PI>0){
System.out.println(Thread.currentThread().getName()+"..."+PI--);
}
}
}
}
}


线程间的通讯:就是多个线程在操作同一个资源,但是操作动作不同

wait和sleep的区别

wait:释放资源释放锁,必须要调用notify才能唤醒

sleep:释放资源不释放锁,可以定义时间,时间一到自动就醒了

停止线程

1.run方法结束
2.定义循环标记,让循环退出,让run方法结束

守护线程(setDaemon())

当进程中只剩下守护线程,该进程就结束退出。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: