今天分享java中的线程
首先先来认识一下什么是进程,程序是对数据描述与操作的代码集合,如暴风影音、QQ音乐等
进程是程序的一次动态执行的过程,它对应了从代码加载,执行至执行完毕的一个完整过程进程的特点是:
1.进程是系统运行程序的基本单位
2.每一个进程都有自己独立的一块内存空间、一组系统资源
3.每一个进程的内部数据和状态都是完全独立的。
接下来是线程,线程是进程中执行运算的最小单位,可完成一个独立的顺序控制流程,线程可以在执行主进程的时候抢到cpu资源的情况下执行的程序,线程的好处有:
1.充分利用cpu资源
2.简化编程模型
3.带来良好的用户体验
那么怎么用呢?
有两种方法第一种是继承java中Thread这个类,线程的方法有:
![](https://i-blog.csdnimg.cn/blog_migrate/76cc8fd6919b48444f351be0f38eda2c.png)
下面说一下这些方法
setPriority(int newPriority):这个方法是更改线程的优先级其实线程中有等级制度优先级越高的线程就越有机会被执行 注意是越有机会不是一定就会执行这个线程
static void sleep(long millis):这个方法呢是让线程进入暂停执行的状态并把cpu让出来让其他线程抢,线程执不执行就是看抢不抢得到cpu。
void join():这个方法就是让线程进入强制运行状态意思就是当在执行别的线程时如果该线程调用了这个方法那么当前运行的线程就的等调用这个方法的线程执行完才会继续执行
static void yield():这个方法是当前线程如果执行到这个方法则会把cpu释放然后看谁抢到谁就执行
void interrupt():这个方法就是中断线程
boolean isAlive():这个方法就是查看线程是否在执行状态。
刚才说了使用线程的方式有两种那么现在说第一种继承Thread类
下面看看怎么继承:
public class MyThread extends Thread {
//重写run方法
public void run(){
for (int i = 0; i < 10; i++) {
//Thread.currentThread()是获取当前线程对象.getName是获取当前线程的名字默认会自动分配
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
测试类中
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
MyThread thread=new MyThread();
thread.start();//启动线程
}
}
运行结果:
![](https://i-blog.csdnimg.cn/blog_migrate/e03f183cd848a35d21106023ce22e9c8.png)
以上就是创建的一个线程并运行如果多个线程同时在main方法中执行的话那么它们抢cpu资源谁抢到谁执行所以就会出现两个线程交叉执行的情况大家可以去试一下大家可能想知道为什么不直接调用run方法而是用start方法答案是start是启动线程的方法那么它执行规则就是线程的规则而调用run方法编译器就会认为他是一个方法从而以主进程的方式执行但是执行的代码都是run方法中的代码。
还有一种方法就是实现Runnable接口下面是代码:
public class MyRunnble implements Runnable {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
//Thread.currentThread()是获取当前线程对象.getName是获取当前线程的名字默认会自动分配
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
测试类:
public class Test1 {
/**
* @param args
*/
public static void main(String[] args) {
MyRunnble j=new MyRunnble();
//因为实现的接口所以要用Thread配合使用参数中可添加线程名字
Thread h=new Thread(j,"Runnable");
h.start();
}
}
运行结果:
![](https://i-blog.csdnimg.cn/blog_migrate/1998d853432b8d7ad6444e2227eba40c.png)
好了今天分享就到这里