突然想起一个问题,多线程中,同一个对象方法的执行是怎样的,后来写了一个测试。
服务类
public class ThreadTestService {
public void onLogic(Object t) {
if(t.toString().equals("12")) {
int step = 0;
double a = 2;
while(step <500) {
step++;
a++;
System.out.print(t+":"+a);
}
System.out.println();
}
System.out.println(t);
}
}
final ThreadTestService service = new ThreadTestService();
for(int i = 0; i< 10 ;i++) {
Thread thread= new Thread(){
public void run() {
service.onLogic(this.currentThread().getId());
}
};
thread.start();
};
在上面的代码中,声明了一个对象,用多线程进行了多次调用,碰到线程号为12的进行复杂处理,加长处理时间,运行结果如下:
9
10
12:3.012:4.012:5.012:6.012:7.012:8.012:9.012:10.012:11.012:12.012:13.012:14.012:15.012:16.012:17.012:18.012:19.012:20.012:21.012:22.012:23.012:24.012:25.012:26.012:27.012:28.012:29.012:30.012:31.012:32.012:33.012:34.012:35.012:36.012:37.012:38.012:39.012:40.012:41.012:42.012:43.012:44.012:45.012:46.012:47.012:48.012:49.012:50.012:51.012:52.012:53.012:54.012:55.012:56.012:57.012:58.012:59.012:60.012:61.012:62.012:63.012:64.012:65.012:66.012:67.0
11
12:68.012:69.012:70.0
13
12:71.012:72.012:73.012:74.012:75.012:76.012:77.012:78.012:79.012:80.0
15
14
17
16
18
12:81.012:82.012:83.012:84.012:85.012:86.012:87.012:88.012:89.012:90.012:91.012:92.012:93.012:94.012:95.012:96.012:97.012:98.012:99.012:100.012:101.012:102.012:103.012:104.012:105.012:106.012:107.012:108.012:109.012:110.012:111.012:112.012:113.012:114.012:115.012:116.012:117.012:118.012:119.012:120.012:121.012:122.012:123.012:124.012:125.012:126.012:127.012:128.012:129.012:130.012:131.012:132.012:133.012:134.012:135.012:136.012:137.012:138.012:139.012:140.012:141.012:142.012:143.012:144.012:145.012:146.012:147.012:148.012:149.012:150.012:151.012:152.012:153.012:154.012:155.012:156.012:157.012:158.012:159.012:160.012:161.012:162.012:163.012:164.012:165.012:166.012:167.012:168.012:169.012:170.012:171.012:172.012:173.012:174.012:175.012:176.012:177.012:178.012:179.012:180.012:181.012:182.012:183.012:184.012:185.012:186.012:187.012:188.012:189.012:190.012:191.012:192.012:193.012:194.012:195.012:196.012:197.012:198.012:199.012:200.012:201.012:202.012:203.012:204.012:205.012:206.012:207.012:208.012:209.012:210.012:211.012:212.012:213.012:214.012:215.012:216.012:217.012:218.012:219.012:220.012:221.012:222.012:223.012:224.012:225.012:226.012:227.012:228.012:229.012:230.012:231.012:232.012:233.012:234.012:235.012:236.012:237.012:238.012:239.012:240.012:241.012:242.012:243.012:244.012:245.012:246.012:247.012:248.012:249.012:250.012:251.012:252.012:253.012:254.012:255.012:256.012:257.012:258.012:259.012:260.012:261.012:262.012:263.012:264.012:265.012:266.012:267.012:268.012:269.012:270.012:271.012:272.012:273.012:274.012:275.012:276.012:277.012:278.012:279.012:280.012:281.012:282.012:283.012:284.012:285.012:286.012:287.012:288.012:289.012:290.012:291.012:292.012:293.012:294.012:295.012:296.012:297.012:298.012:299.012:300.012:301.012:302.012:303.012:304.012:305.012:306.012:307.012:308.012:309.012:310.012:311.012:312.012:313.012:314.012:315.012:316.012:317.012:318.012:319.012:320.012:321.012:322.012:323.012:324.012:325.012:326.012:327.012:328.012:329.012:330.012:331.012:332.012:333.012:334.012:335.012:336.012:337.012:338.012:339.012:340.012:341.012:342.012:343.012:344.012:345.012:346.012:347.012:348.012:349.012:350.012:351.012:352.012:353.012:354.012:355.012:356.012:357.012:358.012:359.012:360.012:361.012:362.012:363.012:364.012:365.012:366.012:367.012:368.012:369.012:370.012:371.012:372.012:373.012:374.012:375.012:376.012:377.012:378.012:379.012:380.012:381.012:382.012:383.012:384.012:385.012:386.012:387.012:388.012:389.012:390.012:391.012:392.012:393.012:394.012:395.012:396.012:397.012:398.012:399.012:400.012:401.012:402.012:403.012:404.012:405.012:406.012:407.012:408.012:409.012:410.012:411.012:412.012:413.012:414.012:415.012:416.012:417.012:418.012:419.012:420.012:421.012:422.012:423.012:424.012:425.012:426.012:427.012:428.012:429.012:430.012:431.012:432.012:433.012:434.012:435.012:436.012:437.012:438.012:439.012:440.012:441.012:442.012:443.012:444.012:445.012:446.012:447.012:448.012:449.012:450.012:451.012:452.012:453.012:454.012:455.012:456.012:457.012:458.012:459.012:460.012:461.012:462.012:463.012:464.012:465.012:466.012:467.012:468.012:469.012:470.012:471.012:472.012:473.012:474.012:475.012:476.012:477.012:478.012:479.012:480.012:481.012:482.012:483.012:484.012:485.012:486.012:487.012:488.012:489.012:490.012:491.012:492.012:493.012:494.012:495.012:496.012:497.012:498.012:499.012:500.012:501.012:502.0
12
一看结果(黑体,标识一次线程执行结束),才想起,线程中断会保护现场,下次执行时,会寻找中断地址,继续往下执行。
对象的方法是存放于类似操作系统内存的代码区(jvm应该是在堆栈中分出了代码区),
需要研究一下JVM规范
分享到:
相关推荐
"Java多线程中断机制三种方法及示例" Java多线程中断机制是Java编程语言中一个重要的概念,涉及到线程的生命周期和线程的协作机制。中断机制是一种协作机制,通过中断并不能直接终止另一个线程,而需要被中断的线程...
Java 多线程中断代码详解 Java 中断机制是多线程编程中的一种重要机制。它允许一个线程请求另一个线程停止执行某个操作或退出线程。Java 提供了多种方式来中断线程,包括使用 stop() 方法、interrupt() 方法和使用 ...
Java多线程中断机制及实例详解 Java多线程中断机制是Java语言中的一种机制,用于控制线程的执行和中断。在Java中,线程可以通过interrupt()方法来中断其他线程的执行,而被中断的线程可以通过isInterrupted()方法来...
### CPU中断——实现多线程机制 #### 一、引言 在计算机系统中,多线程机制是一种常见的技术手段,用于提高程序的执行效率和响应能力。它允许在一个进程中同时运行多个线程,每个线程都可以独立地执行任务。为了...
6. **异常处理**:多线程环境下的异常处理需要特别注意,因为一个线程的异常可能会中断其他线程。大漠的模板可能包含了优雅的异常处理机制,确保线程异常不会导致整个程序崩溃。 7. **线程间通信**:`WaitHandle`类...
`interrupt()`是Java多线程中断机制的核心。当调用一个线程的`interrupt()`方法时,该线程的中断状态会被设置。如果线程正在阻塞(如等待I/O或者在`wait()`, `sleep()`, `join()`等方法中),`interrupt()`会抛出`...
在Arduino上实现多线程的一种常见方法是使用中断和定时器。例如,描述中提到的“自动条码”可能涉及读取条码传感器,这通常需要中断服务程序来处理。同时,“给步进电机脉冲”则可能需要一个精确的时间序列来控制...
多线程是实现复杂任务并发执行的关键技术,能够提高资源利用率,优化系统响应时间。在STM32上实现多线程,通常会借助实时操作系统(RTOS)如RT-Thread。 RT-Thread是一个轻量级、开源的实时操作系统,它为STM32等微...
9. **线程中断**:`interrupt()`方法可以标记线程中断状态,线程可以通过检查`isInterrupted()`或`interrupted()`方法来响应中断请求,从而优雅地停止线程执行。 10. **线程局部变量(ThreadLocal)**:为每个线程...
Java多线程笔记是 Java 编程语言中关于多线程编程的笔记,涵盖了线程基础知识、线程优先级、线程状态、守护线程、构造线程、线程中断等多方面的内容。 获取简单 main 程序中的线程 在 Java 中,可以使用 ...
9. **中断线程**:Thread类的interrupt()方法可以请求线程中断,但并不会立即停止线程,而是让线程在检查到中断标志后自行决定如何退出。 10. **守护线程(Daemon)**:守护线程是一种特殊的线程,当所有非守护线程...
在Java编程中,多线程导入Excel数据是一项常见的任务,特别是在大数据处理和高并发场景下。这个场景通常涉及到性能优化和资源管理,以确保系统稳定性和数据一致性。下面将详细阐述多线程导入Excel数据的核心知识点。...
### 可并行递归算法的递归多线程实现:深入解析 #### 引言:多线程与并行处理的重要性 随着计算任务日益复杂,传统的单线程编程模型已无法满足高效处理大规模数据的需求。多线程编程作为一种提高程序并发性和性能...
九、线程中断 Thread类提供了interrupt()方法用于中断线程,但是需要注意的是,中断并不是立即停止线程,而是设置一个中断标志,线程需要在适当的地方检查这个标志并处理中断。 通过对以上知识点的深入理解和实践,...
在Java编程中,多线程并发是提升程序执行效率、充分利用多核处理器资源的重要手段。本文将基于"java 多线程并发实例"这个主题,深入探讨Java中的多线程并发概念及其应用。 首先,我们要了解Java中的线程。线程是...
Java多线程是Java编程中的一个重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。在Java中,实现多线程有两种主要方式:继承Thread类和实现Runnable接口。 1. 继承Thread类: 当我们创建一个新...
在IT行业中,多线程技术是一项关键的编程概念,它允许程序同时执行多个任务,显著提高了效率和响应性。在Delphi这样的集成开发环境中,利用多线程进行批量下载是常见的应用场景,尤其对于处理大量数据或者大文件下载...
在IT领域,多线程遍历磁盘文件是一项常见的任务,尤其在大数据处理、文件管理系统以及备份恢复等场景中。本文将深入探讨如何利用多线程技术高效地遍历包括隐藏文件和系统文件在内的所有磁盘文件。 首先,我们要理解...
Java多线程还涉及到线程中断和异常处理,Thread类提供了interrupt()方法发起中断请求,线程可以通过检查isInterrupted()或isInterrupted()状态响应中断。在多线程环境中,异常处理也需特别注意,合理的try-catch-...
Java多线程机制是Java编程中至关重要的一部分,它允许程序同时执行多个任务,提升应用程序的效率和响应性。以下是对各个知识点的详细说明: 9.1 Java中的线程: Java程序中的线程是在操作系统级别的线程基础上进行...