Java线程学习

一、进程和线程的联系及区别。
1.线程是程序执行中的一个执行路径(子任务)。
2.多线程是指程序中包含多条执行路径。也是指在一个进程中的同时执行两个或两个以上的线程。
3.大多数程序只有一条=执行路线,但现实世界中的很多过程都是同时发生的对应这种情况,可编写有多条执行路径的程序,使得程序能够同时执行多个任务(并行)。
4.多线程机制使得程序的多个子任务能够“同时”执行。
5.进程:是一个程序在其自身的地址空间中的一次执行活动,是程序独立运行的基本单位。
二、线程与进程之间的联系。
1.线程在进程之中,单线程即进程。但通常一个进程可拥有多个线程,其中有一个是主线程。
2.线程也有进程的五中状态的转换。
3.线程与进程都是顺序执行的指令系列。
三、线程与进程之间的区别。
1.线程的划分比进程小。
2.进程能独立运行、父进程和子进程都有各自独立的数据空间和代码;线程不能独立运行,父线程和子线程共享相同的数据空间并共享系统资源。
3.进程是相对静止的(但相对于程序是动态的),它代表代码和数据存放的地址空间;而线程是动态的,每个线程代表进程内的一个执行流。
四、java线程的生命周期中一共有五个状态:1.新建状态。2.就绪状态。3.运行状态。4.阻塞状态。5.终止状态。


实例1:
此线程是用继承Thread实现
public   class   ThreadTest{//使用继承Thread线程
public  static void main(String[]   agrs){
//new  MyThread()新建线程
new  MyThread().start();//线程进入就绪状态
}

}


class  MyThread extends  Thread{

//空构造器
public  MyThread(){

}

@Override
public  void  run(){//线程运行状态
//运行数据
for(int  i=0;i<20;i++){
//Thread.currentThread().getName()得到线程名字
System.out.print("子线程:"+Thread.currentThread().getName()+i);


}


}
}


实例2: 
此线程是使用Runnable接口实现
public  class RunnableTest  implements Runnable{
//构造器
public   RunnableTest(){

}

public static void main(String[]  agrs){

//使用的是匿名新建线程
new  Threaad(new  RunnableTest()).start();//线程进入就绪状态
}


@Override
public  void   run(){

for(int i=0; i<20;i++){

System.out.print("子线程:"+Thread.currentThread().getName()+i);//线程运行状态

}
}
}
五、线程停止:
1.定义循环结束标记
因为线程运行代码一般都是循环,只要控制了循环即可。
2.使用interrupt(中断)方法。
该方法是结束线程的冻结状态,使线程回到运行状态中来。
六、线程常用方法。
isAlive()  //线程是否还在运行。
getPriority()  //获取当前线程优先级。
setPriority()  //设置线程优先级(值在10-1之间)。默认为5
sleep()  //休眠,指待定线程执行完毕。
yield()  //让出CPU.
wait()  //是让线程阻塞在着。
notify()  //唤醒单个线程。
notify()  //唤醒所有的线程。
   
七、线程同步(synchronized)
格式:
synchronized(对象){

需要同步的代码;
}
实例:(两条线程互相抢对方的而形成死锁)
public class DesdSynTest {
//创建两条线程对象
Object    syn1=new  Object();
Object    Syn2=new  Object();


Runnable   dst1=new  Runnable(){
@Override
public  void run(){
try {
test1();
} catch (Exception e) {
e.printStackTrace();
}
}

};

Runnable   dst2=new  Runnable() {

@Override
public void run() {
try {
test2();
} catch (Exception e) {
e.printStackTrace();
}

}
};

public static void main(String[]  args){
new  DesdSynTest().start();

}
/**
* start()开线程方法
* */
public void  start(){
new   Thread(dst1).start();
new   Thread(dst2).start();

}
/**
* 在test1中拿着syn1的锁去抢syn2的锁

* */
public  boolean  test1() throws  Exception{
synchronized(syn2){
System.out.println(Thread.currentThread().getName()+"test1");
Thread.sleep(1000);
synchronized(syn1){
System.out.println(Thread.currentThread().getName()+"test2");
Thread.sleep(1000);
}

}
return   true;

}
/**
* 在test2中拿着syn2的锁去抢syn1的锁
* */
public  boolean test2() throws Exception {
synchronized(syn1){
System.out.println(Thread.currentThread().getName()+"test2");
Thread.sleep(1000);
synchronized(syn2){
System.out.println(Thread.currentThread().getName()+"test1");
Thread.sleep(1000);
}
}
return  true;
}
}













































  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值