前言
大家好,我是小涛,一名学Java一学期的大一学生,本人所发的见解都是本人自己所理解的Java知识问题,有任何不妥之处欢迎指出,本人浅薄理解,感谢大家的耐心观看。
1.什么是Java的多线程
同时执行多个线程的处理,比方说10个线程同时给同一个变量作加一的操作,每个线程加5次,最后的结果不是50,还是10,这就是Java的多线程。
2.并发与并行
并发:时间段内有不少的线程或进程在执行,但何时间点上都只有一个在执行,多个线程或进程争抢时间片轮流执行。
并行:时间段和时间点上都有多个线程或进程在执行。
补充一点:上课的时候我们老师说,我们在一台计算机上使用多个软件,看似是同时运行的,其实不是同时运行的,在cpu上会有一个快速的转换过程,这个点我个人有点疑问,于是课下去找了下资料,和询问了老师,老师说确实是他课上讲的太绝对话了,单核cpu所有的软件不是同时运行的,而多核cpu是几个软件同时运作的。
3.Java创建线程的方法
(1)继承Thread类,实现run()方法;
(2)实现Runnable接口,实现run()方法;
(3)实现Callable<Class>接口,实现call()方法。
call()方法与run()方法的两个主要区别:
1、call()方法可以有返回值,且返回值类型需要与声明接口时的泛型类型一致。
2、call()方法可以抛出异常。
public class Demo01 {
public static void main(String[] args) {
Mytecher mt=new Mytecher();
new Thread(mt, "老师A").start();
new Thread(mt, 老师B").start();
new Thread(mt, "老师C").start();//打开三个线程
}
}
class Mytecher extends Thread{//继承Thread类
static int paper=80;//定义80张试卷吗
@Override
public void run() {//重写run方法
while (true) {
if(paper>=0){
System.out.println(Thread.currentThread().getName()+"正在发售第"+paper--+"张试卷");//对结果的输出
}
}
}
}
//三个老师分发80张试卷
这也是我的一次作业代码,三个老师分发80张试卷,一开始对于多线程的理解不深,写成三个老师发了240张试卷,这种错误对于我这种Java小白来说很常见,我也在不断的错误中改进自己的代码,最终写成。
以下这段代码是我们上课最初写的打开线程的最基本方法,就是利用start();进行线程的打开,然后输出,线程问题的初学者可以借鉴和学习。
public class Mythread_Demo {
public static void main(String[] args) {
ThreadA tha=new ThreadA();
tha.setName("线程A");
tha.start();
ThreadB thb=new ThreadB();
new Thread(thb,"线程B").start();
}
}
class ThreadA extends Thread{
public ThreadA() {
}
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println(getName()+"aaaaaaa");
}
}
}
class ThreadB implements Runnable{
public ThreadB(ThreadB thb, String string) {
// TODO Auto-generated constructor stub
}
public ThreadB() {
// TODO Auto-generated constructor stub
}
@Override
public void run() {
for (int i = 0; i <100; i++) {
System.out.println(Thread.currentThread().getName()+"bbbbbbb");
}
}
}
总结
我在学习完Java的线程问题后,自己也有很多疑惑,并且自己也积极的去解决了这些疑惑,我在想既然是cpu问题,那肯定分单核和多核运行的cpu,我也是问了身边的一些朋友,在Java中多线程的内容并不多,Java多线程问题并不细化,进程问题更多的是在操作系统上面。这也就是我的一些浅薄理解,感谢观看。