java线程思想_java中的线程

1.进程:一条动态执行的程序。

2、线程:进程可以近一步细化为线程。一个程序内部的一条执行路径就叫做线程。如果把进程比喻

成一座灰常大的王府,那么线程就是进出这座王府的一扇扇门。线程可以分为:用户线程、守护线程

和主线程。主线程我们一般是不需要考虑的。用户线程是jvm在非守护线程都结束后自动离开,而守

护线程是用来服务守护线程的。怎么说呢。。。当一个线程在所有其他的线程都结束以后仍然需要运

行,我们可以将这个线程设置为守护线程,用setDaemon(true)进行设置。在java中,析构函数是典型的守护线程。

3、线程的状态:新建状态、可运行状态、阻塞状态、等待状态、超时状态和终止状态。设置等待状态可以用个Thread t1=new Thread(new Program()).sleep("500")来进行设置,其中Program实现了Runnable的接口。Thread.yield()方法会暂停正在执行的线程的对象,将机会给更高优先级的或者是相同优先级的线程。

4、线程的同步:用synchronized关键字。synchronized(){}是同步块,()填的是一个唯一的地址变量,地址变量是唯一的一个,不可变更的。可以看成是一把锁,当有线程用了这把锁以后,那么别的线程就只能等待,不能重新的获取锁来打开这个同步块。

5、线程的加入:用t1.join()设置线程的加入。我发现了一个有趣的现象。先看下面的代码:

public class Program {

public static void main(String[] args) {

System.out.println("主线程开始。。。");

System.out.println("主线程结束。。。");

T1 t1 = new T1();

Thread thread1 = new Thread(t1);

thread1.setName("t1线程");

thread1.start();

T2 t2 = new T2();

Thread thread2 = new Thread(t2);

thread2.setName("t2线程");

thread2.start();

for (int i = 0; i 

System.out.println(Thread.currentThread().getName()+":"+i);

if(i==100){

try {

thread1.join();  //这里设置了当i==100的时候thread1加入主线程

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

}

class T1 implements Runnable{

public void run() {

for (int i = 0; i 

System.out.println(Thread.currentThread().getName()+":"+i);

}

}

}

class T2 implements Runnable{

public void run() {

for (int i = 0; i 

System.out.println(Thread.currentThread().getName()+":"+i);

}

}

}

当在主线程里i设置了100的条件时,thread1加入线程中,可是在运行的过程中,主线程到i==100时就不会执行了,而是thread1和thread2交替执行,当thread1全部执行完时,thread2和主线程才交替运行。这个和大神说的顺序执行可是不一样的,因为这里的子线程有两个,thread1是的确是和主线程顺序执行的,但是thread2还是可以和thread1交替执行的。

6、匿名:

new Thread(new Runnable() {

public void run() {

for (int i = 0; i 

System.out.println("线程t1..."+i);

}

}

}).start();

new Thread(new Runnable() {

public void run() {

for (int i = 0; i 

System.out.println("线程t2..."+i);

}

}

}).start();

可以在程序中把线程写成这种形式,美其名曰:匿名

7.wait和notify是解决java中同步问题的重要方法,和synchronized结合使用。当synchronized方法或者是代码块中调用wait方法时,当前对象被终端运行,并且放弃该对象的锁。当另外的对象调用notify方法时会唤醒某个等待池中的某个对象,使之成为可运行的的线程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值