RE:JAVA学习-了解线程
来源:互联网 发布:阿里布达祭txt 百度云 编辑:程序博客网 时间:2024/05/17 00:02
1.什么是进程(一块包含了某些资源的内存区域)
操作系统中运行的一个任务
2.什么是线程(进程中所包含的一个或多个执行单元)
概念:进程的一个顺序执行流
使用: 1.(通常)在一个程序需要同时完成多个任务时
2.用于单一线程时,使用多线程可以更快(如下载文件)
3.进程和线程的区别
3.1 线程只能归属于一个进程(当操作系统创建一个进程后,该进程会自动申请一个主线程(首要线程))
3.2 一个进程至少有一个线程
3.3 (执行过程中的区别)每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口(线程不能独立执行,依附在应用程序中)
4.多线程并发原理
OS(操作系统)将时间划分为很多时间片段(时间片),尽可能均匀分配给每一个线程,获取时间片段的线程则运行,其他则等待。(在微观上并不是同时发生)
但在宏观上,则同时运行(称作并发)
5.创建Thread(线程)并启用
5.1 继承Thread 线程类,并重写其run()方法,并在main函数中用start()方法调用(重用性差)
class MyThread1 extends Thread{
@Override
public void run() {
// TODO Auto-generated method stub
for(int i=0;i<100;i++){
System.out.println(“who?”);
}
super.run();
}
}
5.2实现Runnable接口并重写run方法(可以减少耦合度)
class MyRunnable1 implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
for (int i = 0; i < 100; i++) {
System.out.println(“who???”);
}
}
}
5.3使用(匿名)内部类创建
new Thread(){
@Override
public void run() {
// TODO Auto-generated method stub
for(int i=0;i<100;i++){
System.out.println("你是谁啊?"); } super.run(); }}.start();5.4实现Callable<R>接口,重写其中的call方法
6.有关线程操作
6.1 static Thread currentThread()
获取运行这个方法的线程
Thread th=Thread.currentThread();
public class Thread_currentThread { public static void main(String[] args) { //获取运行main方法的线程 Thread th=Thread.currentThread(); System.out.println("运行main方法的线程是:"+th); dosome(); Thread t=new Thread(){ @Override public void run() { // TODO Auto-generated method stub Thread t=Thread.currentThread(); System.out.println("自定义线程:"+t); dosome(); super.run(); } }; t.start(); } public static void dosome(){ Thread t=Thread.currentThread(); System.out.println("运行dosome方法的线程是:"+t); }}
6.2线程优先级
理论上,线程优先级越高的线程获取CPU时间片的次数越多
线程的优先级有10个等级,分别用整数1-10表示,5为默认
Thread max=new Thread(“max”);
Thread min=new Thread(“min”);
max.setPriority(Thread.MAX_PRIORITY);
min.setPriority(Thread.MIN_PRIORITY);
6.3 static void sleep(long ms) 该方法会将运行当前方法的线程阻塞指定毫秒 SimpleDateFormat sdf=new SimpleDateFormat("HH:mm:ss"); while(true){ Date date=new Date(); String s=sdf.format(date.getTime()); System.out.println(s); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } }6.4其他getId()getName()getPriority() 获取优先级isAlive()isDaemon() 是否为守护线程isInterrupted() 是否被中断
/** * 获取线程信息的相关方法 * */public class Thread_info { public static void main(String[] args) { Thread t=Thread.currentThread(); //获取线程标识 long id=t.getId(); System.out.println("id:"+id);//id:1 System.out.println(t.getName());//main// int priority=t.getPriority(); System.out.println(t.getPriority());//5// t.interrupt(); //线程是否活着 System.out.println(t.isAlive());//true //是否为守护线程 System.out.println(t.isDaemon());//false //是否被中断 System.out.println(t.isInterrupted());//false }}
- RE:JAVA学习-了解线程
- RE:JAVA学习-了解对象和类+数组
- RE:JAVA学习-了解内存管理+继承的意义
- RE:JAVA学习-线程及线程池操作
- java线程 Thread.sleep()的学习了解
- JAVA多线程学习一:线程的了解
- RE:JAVA学习-方法调用
- RE:JAVA学习-步入抽象
- RE:JAVA学习-步入String
- RE:JAVA学习-集合操作
- RE:JAVA学习-HashMap用法
- JAVA 多线程--了解线程
- 了解Java中的线程
- 快速了解Java 线程
- 深入了解Java虚拟机学习之--如何实现线程安全?
- RE:JAVA-了解多态+内部类用法
- 彻底了解Java线程池
- java中线程初步了解
- 什么是「闭包」,「闭包」的作用是什么。
- NYOJ【56】阶乘因式分解(一)【思维】&&【数学】
- SpringMVC如何处理国际化
- SSM框架——使用MyBatis Generator自动创建代码
- 一个Google Play的开发者,要了解的一些小事
- RE:JAVA学习-了解线程
- 【转】ABAP的坑3
- HUD 1166 敌兵布阵 (线段树, 单点修改)
- dpdk编译遇到了问题1
- http和https的区别
- 手游精品化的第三年,谁在窃取手游开发者的利益?
- 窗口居中,自适应高度
- css中!important的作用
- Java NIO(Non-blocking IO)