JAVA 多线程--了解线程

来源:互联网 发布:fifa online3数据库cc 编辑:程序博客网 时间:2024/06/06 01:01

      想要学习线程,首先要了解进程。

    在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。每一个程序对应一个进程,线程是进程内的可调度实体。进程是独占资源的,进程内的线程共享进程的资源。

    为什么要有线程?

线程是为了更好的利用进程内的资源。提高CPU利用率。CPU是以线程为执行单位的,线程对进程的切分与细化,提高了进程内的资源利用率。

    为什么存在线程安全问题?

    如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。
    或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题。
    线程安全问题都是由全局变量及静态变量引起的。
    若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步,否则的话就可能影响线程安全。

    那线程到底在哪里?

    在敲线程demo的时候,总是实例化一个或多个Thread类,来实现开启多个线程。那如果我们不实例化这个类就不开启线程了吗?
    java类都有一个默认的main方法,当我们执行main方法的时候,就开启了一个线程。
Thread.currentThread():获取当前的线程。
public class TraditionalThreadSynchronized {/** * @param args */public static void main(String[] args) {System.err.println("最早的线程"+Thread.currentThread().getName());}
}
显示结果如下图所示:

 



    两个类之间的调用:

public class TraditionalThreadSynchronized {/** * @param args */public static void main(String[] args) {System.err.println("最早的线程"+Thread.currentThread().getName());/*new TraditionalThreadSynchronized().init();*/TimerTest timerTest=new TimerTest();timerTest.showResult();} }



public class TimerTest {public void showResult(){System.err.println("调用TimerTest类:"+Thread.currentThread().getName());}}



当main为我们开启了一个main线程之后,如果不手动开启线程,基本不会再开启线程。一直在查找我们平常开发的项目没有调用main方法,是谁开启的线程呢?没有找到结果,猜测一下,应该是tomcat服务器开启的,我们的每一次请求,都会开启一个线程。

总结:

    线程是进程的细化。
 


   


0 0
原创粉丝点击