线程小结一

一、进程与线程

1.什么是进程: 正在运行的程序(正在运行的一大段代码)

程序: 一段代码

 

什么是线程:

1.正在运行的一小段代码

2.1个进程至少有1个线程

 

 

在我们计算机中,运行了很多程序,但是对于电脑来说,它只看到很多的线程,它只是来回频繁切换读取线程中的内容

 

我们是控制不了cpu的执行线程顺序,因为执行顺序,完全取决于cpu

 

cpu以线程为单位来回进行频繁切换

 

在同一时间片上,1个cpu只能执行1个线程

 

时间片:一个很微观的时间,比毫秒还要短的时间

 

 

2.怎么去创建线程对象

1.继承

class  类   extends Thread{

public void run(){

线程的主体

}

}

 

//创建线程对象

l = new 类();

//启动线程

l.start();

 

2.实现Runnable接口

class 类  implements Runnable{

public void run(){

线程主体

}

}

 

 l = new 类();

//线程对象

Thread t1 = new Thread(l);

Thread t2 = new Thread(l);

Thread t3 = new Thread(l);

t1.start();

t2.start();

t3.start();

 

3.Thread类的结构

1.run方法              线程的主体,我们把核心代码放到run方法内部

2.start方法         启动一个线程,让线程处于一个活跃状态,拥有获取cpu的执行权利

 

4.主方法一共有多少个线程

严格意义来说:

1.主线程

2.垃圾回收线程(一般我们不考虑垃圾回收线程)

 

5.线程的注意事项:

1.调用run方法和调用start方法的区别:

调用run方法,它是不会启动一个独立的线程,它仅仅只是一个普通方法的调用

调用start方法,它会开启一个独立的线程,让该线程处于活跃状态,可以拥有获取cpu的执行权利

 

2.自己启动的线程和主线程有关系吗

答:没有任何关系,创建的线程和它的环境线程是没有任何关系的。一旦创建好了之后,它就是一个独立的线程

 

6.创建线程2种方式,它们有什么区别呢?

 

1.继承: 它有局限性,因为类与类之间是继承关系,并且只能是单继承

 

2.实现: 它扩展性较强,因为类与接口之间是实现关系,并且是多实现,既能保留原有的业务逻辑,也可以对功能进行扩展

 

 

7.sleep  休眠, 休眠指定的时间,在这段时间中,它放弃cpu的执行权利,当休眠时间已过,该线程又处于活跃状态,又拥有了获取cpu的执行权利

 

8.优先级:

1.主线程的默认优先级是5

2.自定义线程默认的优先级是和当前环境线程的优先级一致

优先级范围:[1,10]

优先级的值越大  就越先执行完毕

转载于:https://www.cnblogs.com/limengkun/p/10668167.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java多线程是指在一个Java程序中同时执行多个线程,每个线程都是独立的执行流。Java中创建线程的方式有三种:继承Thread类、实现Runnable接口和实现Callable接口。每种方式都有其优缺点。 1. 继承Thread类创建线程类: ```java class MyThread extends Thread { public void run() { // 线程执行的代码 } } // 创建线程对象并启动线程 MyThread thread = new MyThread(); thread.start(); ``` 优点:简单易用,可以直接重写Thread类的run()方法。 缺点:由于Java不支持多继承,继承了Thread类就无法再继承其他类。 2. 实现Runnable接口创建线程类: ```java class MyRunnable implements Runnable { public void run() { // 线程执行的代码 } } // 创建线程对象并启动线程 Thread thread = new Thread(new MyRunnable()); thread.start(); ``` 优点:避免了单继承的限制,可以继续继承其他类或实现其他接口。 缺点:需要额外创建Thread对象,并将Runnable对象作为参数传递给Thread对象。 3. 实现Callable接口创建线程类: ```java class MyCallable implements Callable<Integer> { public Integer call() throws Exception { // 线程执行的代码 return 0; } } // 创建线程池对象 ExecutorService executor = Executors.newFixedThreadPool(1); // 提交Callable任务并获取Future对象 Future<Integer> future = executor.submit(new MyCallable()); // 获取线程执行结果 int result = future.get(); ``` 优点:可以获取线程执行的结果,并且可以抛出异常。 缺点:相对于前两种方式,使用Callable需要更多的代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值