如何给网站增加关键词,室内装修设计企业,一个空间2个网站,网站管理员的联系方式线程是什么#xff1a;
进程是程序的一次动态执行的过程#xff0c;线程是进程中执行运算最小单位#xff0c;一个进程在其执行过程中可以产生多个线程#xff0c;而线程必须在某个进程内执行。
如果在一个进程中同时运行了多个线程#xff08;必须包含一个主线程#…线程是什么
进程是程序的一次动态执行的过程线程是进程中执行运算最小单位一个进程在其执行过程中可以产生多个线程而线程必须在某个进程内执行。
如果在一个进程中同时运行了多个线程必须包含一个主线程用来完成不同的工作则称之为“多线程”多个线程交替占用CPU资源而非真正的并行执行
主线程
main()方法即为主线程入口
产生其他子线程的线程
必须最后完成执行因为它执行各种关闭动作
一、创建线程的三种方法
1.Thread类创建线程
继承Thread类重写run()方法线程要执行的操作放在run()方法中通过调用start()方法来启动线程。start()方法只属于Thread类
注意创建线程对象时不会执行线程必须调用线程对象的start方法才能使线程开始
线程每次执行时长由分配的CPU时间片长度决定 主线程
public class TestThread {public static void main(String[] args) {//查看主线程Thread thread Thread.currentThread();System.out.println(thread.getName());//启动子线程MyThread myThread new MyThread();myThread.start();}
} 子线程
public class MyThread extends Thread{Overridepublic void run(){for (int i0;i10;i){System.out.println(Thread.currentThread().getName()i);}}
}
查看线程名字
查看线程名Thread.currentThread().getName()
这里的currentThread是静态方法
public static void main(String[] args) {//查看主线程Thread thread Thread.currentThread();System.out.println(thread.getName());//或者System.out.println( Thread.currentThread().getName());}
直接调用run()和start()区别 使用run( )方法 同步执行只有主线程一条执行路径 使用star( )方法 异步执行多条执行路径主线程和子线程并行交替执行 直接调用run就是同步执行main方法会等run方法执行完以后才会执行下面的操作调用star()方法可以实现异步执行由线程调度器决定先执行main方法还是run方法不是由程序代码中的 start() 调用的顺序直接决定的。 同步和异步
也就是说一个程序需要运行完了有结果了才能进行下一个线程这样这个程序就会堵塞其他的程序这就是同步异步就是这个程序在运行的时候我仍然可以不管他运行别的程序
多线程可以将同步程序变为异步的从而增加系统资源的利用率 2.Runnable接口创建线程
因为Thread是单根继承继承Thread之后不能够继承其他的类了。使用Runnable接口可以解决这个问题。
Runnable接口中声明了一个run()方法即public void run()。 例子使用Runnable接口创建线程
1.实现Runnable接口并且实现Runnable接口的run()方法
2.创建Thread类对象使用Runnable接口实现类的对象作为构造方法的参数 Thread td new Thread(new Test02());
3.调用start方法
子线程
public class MyRunnalbe implements Runnable{Overridepublic void run() {for (int i 0; i 10; i) {System.out.println(Thread.currentThread().getName() i);}}
} 主线程
注意这个start方法是Thread类独有的
所以要创建一个thread对象把myRunnalbe装进去
public class TestRunnable {public static void main(String[] args) {MyRunnalbe myRunnalbe new MyRunnalbe();Thread thread new Thread(myRunnalbe);thread.start();}
} 3.Callable接口创建线程
首先介绍一下这个接口
它需要重写call方法而不是run了并且call()方法有返回值String用futureTask.get()来接收返回值它是一个泛型默认返回为Object可以在泛型中设置想要返回的类型 主程序
public class TestMyCallable {public static void main(String[] args) {MyCallable myCallable new MyCallable();FutureTaskString futureTask new FutureTask(myCallable);Thread thread new Thread(futureTask);thread.start();//接收返回值try {System.out.println(futureTask.get());} catch (Exception e) {e.printStackTrace();}}
} 子线程
public class MyCallable implements CallableString {Overridepublic String call() throws Exception {for (int i 0; i 10; i) {System.out.println(Thread.currentThread().getName() i);}return 蛋蛋最牛掰;}
}