java 初学多线程
Posted 呐呐呐那
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 初学多线程相关的知识,希望对你有一定的参考价值。
什么是进程?
例如:
这些每个都是一个进程,每个进程都有好多功能,这些功能同时运行走的就是线程,多线程
一个进程会有多个线程或者一个线程,是一对多的关系
进程:一个程序进入内存就可以叫做进程
线程:线程是进程的一个执行单元(功能),可以多个线程一起执行
程序运行原理
java是抢占式调度,就是cpu会随机分配时间运行哪个线程时间长一点,执行的多一些。cpu会高速的在每个线程之间来回切换,但是某个时刻只能执行一个线程,
多线程并不能提高程序的运行速度,但是可以提高程序的运行效率,让cpu的使用率更高
分时调度:cpu平均分配时间,每个线程的时间是一样的
主线程
就是我们常用的main()方法,当JVM启动后,必然有一个方法从mian方法开始,到结束。才能执行mian下面的别的方法,依次执行。
Tread类
构造方法
常用方法
写一个新的类,然后继承Thread类,声明这是一个新的线程,将要执行的程序写在新的类里面,方法名run,在mian方法里用start调用
1 package com.oracle.Demo02; 2 3 public class Demo1 extends Thread { 4 //JVM去找OS开了2条路径 5 //对于CPU来说就有了2条路径,这2条路径都会被CPU执行,CPU有自己选择的权利,所以就有了随机性, 6 //也可以理解为2个线程在抢夺CPU的资源(时间) 7 public void run(){ 8 for(int i=0;i<100;i++){ 9 System.out.println("这是新建的线程"+i); 10 } 11 } 12 }
1 package com.oracle.Demo02; 2 3 public class test { 4 5 public static void main(String[] args) { 6 Demo1 de = new Demo1(); 7 //开启线程。start方法会在后台调用run方法 8 de.start(); 9 for(int i=0;i<100;i++){ 10 System.out.println("这是主线程"+i); 11 }
练习:
给我创建三个线程,一个方法是打印1000以内的水仙花数,
一个方法是打印1000以内的所有偶数,一个方法是循环打印1000个数
1 package com.oracle.Demo02; 2 3 public class Demo02 extends Thread { 4 public void run(){ 5 for(int i=1;i<=1000;i++){ 6 int a = i%10; 7 int b = (i/10)%10; 8 int c = i/100%10; 9 if((a*a*a+b*b*b+c*c*c)==i){ 10 System.out.println("水仙花数"+i); 11 12 } 13 } 14 } 15 }
1 package com.oracle.Demo02; 2 3 public class Demo03 extends Thread{ 4 public void run(){ 5 for(int i=1;i<=100;i++){ 6 if(i%2==0){ 7 System.out.println("偶数"+i); 8 } 9 } 10 } 11 }
package com.oracle.Demo02; public class test { public static void main(String[] args) { Demo02 de = new Demo02(); de.start(); 创建第一个线程 Demo03 dee = new Demo03(); dee.start(); 创建第二个线程 for(int i =0;i<=1000;i++){ 主线程 System.out.println(i); } } }
sleep方法,休眠,时间到了自然醒来
1 package com.oracle.Demo03; 2 3 public class Demo03 extends Thread{ 4 public void run(){ 5 for(int i=0;i<10;i++){ 6 System.out.println(""+i); 7 //因为Thread没有声明异常所以只能用try()catch()来解决异常 8 try { 9 sleep(2000); //休眠2秒 10 } catch (InterruptedException e) { 11 // TODO 自动生成的 catch 块 12 e.printStackTrace(); 13 } 14 } 15 } 16 }
1 package com.oracle.Demo03; 2 3 public class Test03 { 4 5 public static void main(String[] args) throws InterruptedException { 6 // TODO 自动生成的方法存根 7 Demo03 de = new Demo03(); 8 //获取main方法的对象 9 Thread th = Thread.currentThread(); 10 de.start(); 11 for(int i=0;i<10;i++){ 12 System.out.println("main"+i); 13 th.sleep(2000); //main方法休眠2秒 14 } 15 } 16 17 }
线程的状态
以上是关于java 初学多线程的主要内容,如果未能解决你的问题,请参考以下文章